在Rails中为继承的类设置自定义属性

时间:2012-12-13 03:54:07

标签: ruby-on-rails-3 inheritance

我不知道该怎么说,所以这是一个例子:

我有一个ModelList和CategoryList继承的模型List。

ProjectList和CategoryList都定义了以下内容:

has_many :listed_items
attr_accessible :listed_attributes
accepts_nested_attributes_for :listed_attributes

现在,:既有类别的lists_items也不同,所以我不能直接将这段代码粘贴到List中。

我试过的是这个(在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

在CategoryList中:

  self.listed = :categories
  self.initialize_attributes!

这很好用,但事实上我必须调用self.initialize_attributes!感觉非常hacky。

有更好的选择吗?

谢谢!

编辑:这是我用过的东西

鉴于我真正想要的是在继承的模型中摆脱这一双线,我刚刚将def initialize_attributes!重命名为def has_many_lists(list)并删除了:listed变量。所以现在我在我继承的模型中调用has_many_lists :categories ...

1 个答案:

答案 0 :(得分:1)

.inherited()钩子在那里很有用

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