2016-11-27 11 views
1

私のプロジェクトにacts_as_locatableという名前の宝石を入れて、その中にActsAsLocatable::Locationクラスが定義されているとします。私はこのように、関連付けを追加するだけで宝石でクラスを編集することによって達成することができる、このクラスにポリモーフィック:subject関連付けを追加したい:Ruby on RailsのGemから既存のモデルにポリモーフィックな関連付けを追加するにはどうすればいいですか?

module ActsAsLocatable 

    class Location < ::ApplicationRecord 

    belongs_to :subject, polymorphic: true 

    ... 

    end 

end 

しかし、私はしませんので、これは悪い考えですこの宝石の更新ごとにこの変更を維持しなければならない。宝石をフォークしてフォークを改造することも、同じ問題を抱えています。

このクラスを拡張、飾り付け、または増やして、多形性のある:subjectの関連付けを追加するにはどうすればいいですか?宝石の残りの機能をそのまま残しながら、モデルファイルを編集しないでください。

答えて

0

猿のパッチについてもう少し研究を行った後、一つの解決策は、(例えば<root>/config/initializers/acts_as_locatable.rbなど)初期化子を追加しているようだ:

ActsAsLocatable::Location.class_eval do 
    belongs_to  :subject,   polymorphic: true 
end 

は、これが最良の選択肢ですか?

関連する問題