Rails 3.2.2とRuby 1.9.2の使用。開発環境のリロードを使用して、マウント可能なエンジンのモデルを別のマウント可能なエンジンに拡張する方法
User
クラスがActiveRecord::Base
のクラスを継承していると宣言するレール搭載エンジンEngineA
があります。私はEngineA::User
に機能を注入したい別のエンジンEngineB
を持っています。今私がやったことは以下の通りである:
方法1:
#EngineA app/models/engine_a/user.rb
module EngineA
class User < ActiveRecord::Base
has_attached_file :avatar
has_many :somethings
end
end
#EngineB lib/engine_b/user.rb
module EngineB
module User
def self.extended obj
obj.class_eval do
has_many :something_elses
end
end
end
end
EngineA::User.extend EngineB::User
これは私にuninitialized constant EngineA::User
エラーになります。その特定のファイルが必要な場合でも、私はhas_attached_file
が理解できるように、EngineA
のペーパークリップを必要とする問題にぶつかります。その道路は、私がEngineA
EngineB
の中の依存関係を知り、必要とする必要があることを認識したときに終わった。
方法2:
私はEngineB
user.rbファイルから最後の行EngineA::User.extend EngineB::User
を除去する以外は前と同じコードを使用します。その後、その呼び出しをEngineB
のイニシャライザに移動しました。
#EngineB config/initializers/my_mixin.rb
EngineA::User.extend EngineB::User
これは完全に機能しました!開発モードを除いて、コードを変更するとモデルが更新されます。リフレッシュされた唯一のものはEngineA::User
であり、私がイニシャライザとして入れたミックスインではありません。だから私はコードを変更した後、私はすべての私の拡張機能を失った。
私はこれを行う最も効率的な方法ですが、これは肯定的ではありません。どんな助けでも大歓迎です。前もって感謝します。
素晴らしいが...完全に動作します!ありがとう! – philt5252