0
我不知道如何短語這一點,所以這裏有一個例子:設置自定義屬性
我有一個模型列表,從中ProjectList和所屬分類繼承。
兩個ProjectList及所屬分類定義如下:
has_many :listed_items
attr_accessible :listed_attributes
accepts_nested_attributes_for :listed_attributes
現在:listed_items是兩個類不同,所以我不能這段代碼只是直接粘貼到列表中。
我已經試過是這樣(在列表):
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
...
感謝sumskyi!這似乎是一個有前途的解決方案,但我最終碰到了這裏討論的問題:http://stackoverflow.com/questions/790626/ruby-can-i-have-something-like-classinherited-thats-triggered-only-after - 我最終找到了另一種回顧性的方式,我覺得我應該早一點想到。我已經用它更新了我的問題。 – ben