2016-08-02 36 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

相關問題