2017-01-05 11 views
0

app/models/concernsapp/controllers/concernsのファイルを、名前空間の代わりにグローバル名前空間に直接ロードします。モジュールをapp/*/*/some_module.rbから直接グローバル名前空間にロード

SomeConcernapp/models/concerns/some_concern.rbに定義した場合、Concerns::SomeConcernではなく、SomeConcernが使用可能になります。

同じ方法で動作するappの別のサブディレクトリにconcernsフォルダを追加したいと思います。より具体的には:をapp/serializers/concerns/some_serializer_concern.rbに定義したいと思いますが、モジュールをConcerns::SomeSerializerConcernと定義すると現在のところ動作しています。

私はのconfig/application.rbに次の行があります:自動ロードとeager_load上

config.paths.add "app/serializers/concerns", eager_load: true

This excellent postが、これは「レール自体は、私が何をしたいのか達成し、それはdoesnの方法であることを信じるように私を導きましたこのシナリオではうまくいきません。私はRails 4.2.6を使用しています。何か案は?

+0

あなたのモジュールの場合は、名前空間にロードされます名前空間に:

私が行うために必要なすべてはconfig/application.rbでeager_load_pathsに直接パスを追加しました。あなたがそれをルートに置くには、それをルートに移動します。 'app/concerns'のようなものを設定することができ、期待どおりに動作するはずです。 – tadman

+0

@tadmanそれはうまくいくだろうが、私は 'models'と' controllers'のフォルダ構造と一貫して、シリアライザ固有の問題を 'シリアライザ'の下に保つことを望んでいます...またはプレゼンタの懸念や承認者の懸念権限がある人なら、それほど価値のないものではありませんが、Rails自体が名前空間ルールをこのパターンに従って明示的に破っているので、比較的簡単な方法があると思いました。 – Dane

答えて

1

これがわかりますgistは答えを提供します。

config.eager_load_paths += [Rails.root.join('lib'), 
          Rails.root.join('app', 'serializers', 'concerns')] 
+1

これはやりますが、少し非標準です。あなたはREADMEにこのクルークについてのメモを追加するか、他の誰かがそれを発見して混乱させるような場合には少なくともその行を推奨したいかもしれません。しばしば、 "誰か"が将来あなた自身です。 – tadman

関連する問題