在rails中继承active_record

时间:2010-08-27 20:55:02

标签: ruby-on-rails ruby inheritance activerecord

现在我的课程看起来像这样。

class BalanceName < ActiveRecord
    def before_validation
      set_blank_attributes_to_nil(@attributes)
    end
end

class Balance < ActiveRecord
    def before_validation
      set_blank_attributes_to_nil(@attributes)
    end
end

我想将activer记录继承到一个类中,而不是希望将该类继承到其他类中。

我想要这样的东西。

class CommonActiveRecord < ActiveRecord::Base

  def before_validation
    set_blank_attributes_to_nil(@attributes)
  end

end

class BalanceName < CommonActiveRecord
    def before_validation
      super
    end
end

class Balance < CommonActiveRecord
    def before_validation
      super
    end
end

2 个答案:

答案 0 :(得分:2)

除了不需要重新定义子类中的before_validation方法之外,您可以完全按照您的方式完成(尽管我猜这些方法可能在填充更具体的验证之前)。

您还需要向rails指出您的CommonActiveRecord类是抽象的,因此不会通过添加来保持:

class CommonActiveRecord < ActiveRecord::Base
  self.abstract_class = true
end

答案 1 :(得分:0)

您可以创建模块(例如lib / common_active_record.rb):

module CommonActiveRecord
  def before_validation
    set_blank_attributes_to_nil(@attributes)
  end
end

然后在你的模型中简单地加入它:

class BalanceName < ActiveRecord::Base
  include CommonActiveRecord
end

class Balance < ActiveRecord::Base
  include CommonActiveRecord
end