2012-12-13 218 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