HABTM ассоциация, связанная с наследованием одной таблицы
У меня есть модель продукта, которая имеет много разделов, и раздел может принадлежать многим продуктам.
Модель раздела имеет подклассы 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 ответа
Предполагая, что у вас есть таблица соединений has_and_belongs_to_many с именем "products_sections", вам потребуются следующие дополнительные ассоциации в вашей модели 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
Продукт не имеет этих методов, потому что они никогда не были определены. Вы должны определить отношения в своем классе продуктов, чтобы получить методы функций / стандартов / опций
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
даст вам лучшее понимание того, что дает вам определение отношений