我有一个产品表,它有多个字段,如产品价格,产品制造商等,这在每个项目中都很常见。所以我与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中进行父子类模型?
答案 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
您将能够从产品
访问任何内容