Именование Rails имеет _много :через :полиморфную связь

У меня возникла небольшая проблема с настройкой Rails _много :через :полиморфное родство.

Я знаю, что эта тема хорошозадокументирована на SO, но я думаю, что моя проблема сводится к моей модели и иностранным _именам ключей, а не к синтаксису, т.е. я думаю, что это Проблема «я слишком долго смотрел на код», которая просто требует другого взгляда.

Во всяком случае, у меня есть следующая настройка.:

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'.

Я предполагаю, что проблема как-то связана с тем фактом, что я имею в виду отношение пользователя как :ответственный. Это правильно?

Спасибо за любую помощь.

8
задан Community 23 May 2017 в 12:31
поделиться