2016-08-02 92 views
0

在我的Ruby on Rails项目我有一个担心app/controllers/concerns/common.rb如何在Rails初始值设定项中使用关注点?

module Common 
    extend ActiveSupport::Concern 

    private 

    def foo 
    end 

end 

我想使用它的foo函数内部config/initializers/devise.rb

Devise.setup do |config| 
    ... 
    foo 
    ... 
end 

现在我没有以某种方式加载common.rbconfig/initializers/devise.rb - 如何去做吧?

目前我正在使用一种解决方法 - 我在config/application.rb中定义foo函数,它可以工作,但它打破了DRY原则。

回答

1

理论上你可以包括色器件的配置里面你的关心:

Devise.setup do |config| 
    include Common 
    foo 
    # ... 
end 

这样怎么过你,包括红宝石的主要对象/顶层上下文的方法。

另外,你可以用你的模块扩展'config'(= Devise),并在config上调用foo方法。

Devise.setup do |config| 
    config.send(:extend, Common) 
    config.foo 
    # ... 
end 

为了使这项工作,但是你需要使foo公开的方法,否则你将无法称之为那样。

如果您的总体目标是避免代码重复,那么很难告诉您什么是最佳解决方案,而无需知道更多关于您想实现的内容的信息,例如,你想从你的设计配置中提取什么共享代码。

+0

谢谢,我用第一种方法。有用。 – prograils