Acitverecord указывает `inverse_of` с помощью` through`, но не наоборот - PullRequest
0 голосов
/ 29 мая 2019

У меня есть 3 модели следующим образом:

class User
  has_many :event_series, inverse_of: :user
  has_many :events, through: :event_series, inverse_of: :user
end

class EventSeries
  belongs_to :user, inverse_of: :event_series
  has_many :events, inverse_of: :event_series
end

class Event
  belongs_to :event_series, inverse_of: :events
  has_one :user, through: :event_series, inverse_of: :events
end

Это все хорошо. Теперь я хочу добавить специальное событие для каждого пользователя, которое называется 'showcase_event'.

class User
  has_one :showcase_event, class_name: 'Event', inverse_of: :user
end

Это не работает, потому что модель Event не имеет пользователя напрямую, она связана через EventSeries.

Я получаю сообщение об ошибке во время сериализации:

ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR:  column events.user_id does not exist

Я использую быстрый jsonapi:

class PublicUserSerializer
  include FastJsonapi::ObjectSerializer
  ...
  has_one :showcase_event, record_type: :event, serializer: EventSerializer
  ...
end

Мне кажется, что обратное отношение, которое у меня есть между User, Event и EventSeries, должно работать между User и showcase_event, но я не знаю, как указать ТОЛЬКО обратное через EventSeries Заранее извиняюсь за отсутствие лучшего словарного запаса для описания этой проблемы.

1 Ответ

0 голосов
/ 29 мая 2019

Решено моей резиновой уткой.Как видно из документации :

Ассоциация #belongs_to всегда используется в модели с внешним ключом.

Поэтому я изменилмое заявление showcase_event к этому:

class User
  belongs_to :showcase_event, class_name: 'Event', inverse_of: :user, optional: true
end

И проблема решена

...