HABTM ассоциация, связанная с наследованием одной таблицы - PullRequest
7 голосов
/ 17 июня 2009

У меня есть модель продукта, которая имеет много разделов, и раздел может принадлежать многим продуктам.

Модель сечения имеет подклассы 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 ]

12 голосов
/ 19 ноября 2012

Предполагая, что у вас есть таблица соединений 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
0 голосов
/ 17 июня 2009

Продукт не имеет этих методов, потому что они никогда не были определены. Вам нужно определить отношения в своем классе продуктов, чтобы получить методы функций / стандартов / опций

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

даст вам лучшее понимание того, что дает вам определение отношений

...