У меня небольшая проблема с установкой полиморфных отношений Rails has_many: through:.
Я знаю, что эта тема хорошо задокументировано на SO, но я думаю, что моя проблема связана с моей моделью и именами foreign_key, а не с синтаксисом, т.е. я думаю, что это - это проблема типа «я слишком долго смотрю на код», которая требует лишь еще одного взгляда.
В любом случае у меня есть следующая настройка:
class Milestone < ActiveRecord::Base
has_many :responsible_items, :as => :responsibility
has_many :responsible, :through => :responsible_items
end
class ResponsibleItem < ActiveRecord::Base
belongs_to :responsible, :class_name => "User"
belongs_to :responsibility, :polymorphic => true
end
class User < ActiveRecord::Base
has_many :responsible_items, :foreign_key => :responsible_id
has_many :responsibilities, :through => :responsible_items
end
Кажется, что это работает нормально, без ошибок, со стороны Milestone. Например, в терминале я могу написать:
Milestone.first.responsible
… И получите пустую коллекцию, как я и ожидал.
Однако со стороны пользователя выполняется:
User.first.responsibilities
… Возвращает ошибку AR:
ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: Cannot have a has_many :through association 'User#responsibilities' on the polymorphic object 'Responsibility#responsibility'.
Я предполагаю, что проблема как-то связана с тем фактом, что я имею в виду отношения с пользователем как: ответственный. Это правильно?
Любая помощь будет принята с благодарностью, спасибо.
User.first.responsibilities
, я ожидаю объектов Milestone, да. - person Pete   schedule 20.04.2012responsibilities
с помощью отношения: polymorphic, потому что все они принадлежат разным объектам. В результате я должен быть более конкретным в модели пользователя и указать, какие обязанности я хочу, т.е.has_many :milestone_responsibilities, :through => :responsible_items, :source => :responsibility, :source_type => 'Milestone'
- person Pete   schedule 20.04.2012