2016-08-02 5 views
0

は私が心配app/controllers/concerns/common.rb持っている今のRails初期化プログラムで懸念事項を使用するにはどうすればいいですか?私は<code>config/initializers/devise.rb</code>の内側にその<code>foo</code>機能を使用したい</p> <pre><code>module Common extend ActiveSupport::Concern private def foo end end </code></pre> <p>:私のRuby on Railsのプロジェクトで

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

を私は何とかconfig/initializers/devise.rbcommon.rbをロードするために失敗しました - どのようにそれをするために?

現在、私は回避策を使用しています - 私はconfig/application.rbfoo関数を定義し、それが動作しますが、それはDRY原則を破ります。あなたはルビーの主な目的/トップレベルのコンテキストでメソッドを含めている、これまでどのように

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

その方法:

答えて

1

理論的には、あなたは工夫の設定中にあなたの懸念を含めることができます。

また、モジュールで 'config'(= Devise)を拡張し、configのfooメソッドを呼び出すこともできます。

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

この作品を作るために、しかし、あなたはそれ以外の場合は、あなたがそのようにそれを呼び出すことができなくなり、パブリックメソッドをfooのようにする必要があります。

コードの重複を避けることが目標だとすれば、達成したいことについてもっと知らなくても、最良の解決策が何であるかを伝えることは難しいです。 devise設定からどの共有コードを抽出するか

+0

ありがとう、私は最初のアプローチを使用しました。できます。 – prograils

関連する問題

 関連する問題