rails活动记录

时间:2015-08-12 10:54:21

标签: ruby-on-rails ruby inheritance activerecord

我有一个产品表,它有多个字段,如产品价格,产品制造商等,这在每个项目中都很常见。所以我与productItem建立了belongs_to关系。每个产品都有自己的规格。现在我认为有必要制定一些常用的方法。从OOP的概念来看,我试图制作Parent类Sub类模型,其中子类将继承parent的所有方法。所以我尝试过以下方法:

class Product < ActiveRecord::Base
  def check
    ...
  end
end

class ProductItem < Product
  belongs_to :product
end

会引发以下错误:

undefined method `some_field_id' for #<ProductItem:0x007f8cac666850>

那么如何在rails中进行父子类模型?

1 个答案:

答案 0 :(得分:2)

类继承不是代码共享,你应该依赖mixins来做这样的事情。创建这样的模块,您可以将其放在app/shared/yourmodule.rb

module Yourmodule

  def dosomething
  end

end

class Product
  include Yourmodule
end

class ProductItem
  include Yourmodule
end

Product.new.dosomething
ProductItem.new.dosomething

您可以通过STI共享属性,但仅当您共享所有父属性加上一些其他字段时才建议使用STI,请注意它。

STI很简单:添加(如果你还没有)你想要继承的表的type列,使它成为一个字符串,不要设置任何默认值并保持可为空。现在你可以这样做:

class Product < ActiveRecord::Base
end

class ProductItem < Product
end

您将能够从产品

访问任何内容