与单表继承关联的HABTM关联

时间:2009-06-16 23:28:45

标签: ruby-on-rails ruby has-and-belongs-to-many sti

我的产品型号有很多部分,部分可以属于很多产品。

剖面模型具有Feature,Standard和Option的子类。

我的模特是:

class Product < ActiveRecord::Base  
 has_and_belongs_to_many :categories  
 has_and_belongs_to_many :sections    
end

class Section < ActiveRecord::Base  
 has_and_belongs_to_many :products
end

class Feature < Section
end 

class Standard < Section
end 

class Option < Section
end

在我的产品控制器中,我可以这样做:

@product.sections.build

我希望能够像这样的东西进入子类:

@product.features.build

@product.standards.build

@product.options.build

但它只是错误的“未定义的方法'功能'”等。

请有人能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:12)

假设您有一个名为“products_sections”的has_and_belongs_to_many连接表,那么您需要的是Prodcut模型中的这些附加关联:

class Product < ActiveRecord::Base
 has_and_belongs_to_many :sections
 has_and_belongs_to_many :features, association_foreign_key: 'section_id', join_table: 'products_sections'
 has_and_belongs_to_many :standards, association_foreign_key: 'section_id', join_table: 'products_sections'
 has_and_belongs_to_many :options, association_foreign_key: 'section_id', join_table: 'products_sections'
end

答案 1 :(得分:0)

产品没有这些方法,因为它们从未定义过。您需要在产品类中定义关系以获取功能/标准/选项方法

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

将让您更好地了解定义关系给您的内容