Учитывая ассоциации, определенные ниже, я надеюсь, что кто-то может пролить свет на то, почему я не могу
получить доступ ко всем объявлениям, которые относятся к категории, которая, в свою очередь, принадлежит разделу.
Я предполагаю, что это как-то связано с тем, что есть полиморфные отношения
там, но я хотел бы знать, если есть правильный способ сделать то, что я хочу, используя только
заявления ассоциации, или если я должен "свернуть свое" и получить Объявления в
две фазы.
Вероятно, легче понять, просто увидев код:
class CategorySection < ActiveRecord::Base
has_many :categories
has_many :categorizations, :through => :categories
has_many :classifieds, :through => :categories
end
class Category < ActiveRecord::Base
belongs_to :section, :class_name => 'CategorySection',
:foreign_key => 'category_section_id',
:counter_cache => true
has_many :categorizations
has_many :classifieds, :through => :categorizations,
:source => :categorizable,
:source_type => 'Classified'
end
class Categorization < ActiveRecord::Base
belongs_to :category, :counter_cache => true
belongs_to :categorizable, :polymorphic => true
end
class Classified < ActiveRecord::Base
has_one :categorization, :as => :categorizable, :dependent => :destroy
has_one :category, :through => :categorization
end
По большей части все это работает правильно, за исключением одной ассоциации, которую я не могу понять.
Учитывая раздел «Категория», как я могу быстро найти все принадлежащие ему объявления?
Например:
Учитывая категорию, я могу получить все ее категории:
>> @category.categorizations
>> [<Categorization...>,<Categorization...>]
Учитывая категорию, я могу получить все объявления в ней:
>> @category.classifieds
>> [<Classified...>,<Classified...>]
Учитывая раздел, я могу получить все его категории:
>> @section.categories
>> [<Category...>,<Category...>]
Учитывая раздел, я могу пройти через все его классификации: категории
>> @section.categorizations
>> [<Categorization...>,<Categorization...>]
Но, учитывая Раздел, я не могу пройти через все его объявления: категории
>> @section.classifieds
ActiveRecord::HasManyThroughSourceAssociationMacroError:
Invalid source reflection macro :has_many :through for
has_many :classifieds, :through => :categories. Use :source
to specify the source reflection.
Я прислушался к сообщению об ошибке по указанию: source, но все равно не могу заставить его работать. Я попробовал почти все комбинации вариантов в этой ассоциации, о которых я могу думать, но безрезультатно.
Любые советы или предложения будут наиболее ценными. Заранее спасибо.
С уважением,
Kenny