2012-12-13 319 views
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 ...

回答

1

.inherited()掛鉤可能是有用的有

http://ruby.runpaint.org/classes#class-inherited

+0

感謝sumskyi!這似乎是一個有前途的解決方案,但我最終碰到了這裏討論的問題:http://stackoverflow.com/questions/790626/ruby-can-i-have-something-like-classinherited-thats-triggered-only-after - 我最終找到了另一種回顧性的方式,我覺得我應該早一點想到。我已經用它更新了我的問題。 – ben