言い方がよくわからないので、以下に例を示します。
ProjectList と CategoryList が継承するモデル List があります。
ProjectList と CategoryList の両方で、次のように定義されています。
has_many :listed_items
attr_accessible :listed_attributes
accepts_nested_attributes_for :listed_attributes
さて、:listed_items は両方のクラスで異なるため、このコードを直接 List に貼り付けることはできません。
私が試したのはこれです(リスト内):
class << self
attr_accessor :listed
def initialize_attributes!
self.send :has_many, listed
self.send :attr_accessible, "#{listed}_attributes"
self.send :accepts_nested_attributes_for, listed, allow_destroy: true
end
end
self.listed = nil
カテゴリリスト:
self.listed = :categories
self.initialize_attributes!
これは問題なく動作しますが、self.initialize_attributes! を呼び出さなければならないという事実があります。非常にハッキーな感じ。
より良い代替手段はありますか?
ありがとう!
編集:これが私が使用したものです
私が本当に望んでいたのは、継承されたモデルでこの二重線を取り除くことだけだったので、名前を変更def initialize_attributes!
して、変数def has_many_lists(list)
を取り除きました。:listed
だから今has_many_lists :categories
、私は継承されたモデルを呼び出します...