我不知道如何表达这个,所以这里有一个例子:
我有一个 ProjectList 和 CategoryList 继承的模型列表。
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!感觉很hacky。
有更好的选择吗?
谢谢!
编辑:这是我用过的
鉴于我真正想要的是摆脱继承模型中的这条双线,我刚刚重命名def initialize_attributes!
为def has_many_lists(list)
并摆脱了:listed
变量。所以现在我调用has_many_lists :categories
我继承的模型......