7 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
在我的产品控制器中,我可以这样做:
@product.sections.build
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样的东西到达子类:
@product.features.build
@product.standards.build
@product.options.build
Run Code Online (Sandbox Code Playgroud)
但它只是错误的"未定义的方法'功能'"等.
请有人能告诉我怎么做吗?
jhi*_*den 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
Run Code Online (Sandbox Code Playgroud)
产品没有这些方法,因为它们从未定义。您需要在产品类中定义关系才能获取功能/标准/选项方法
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
会让你更好地理解定义关系给你带来了什么