AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как правильно организовать связи has_many: through в RoR?

Есть компании, которые могут обмениваться сообщениями, но только после того как подтвердят, что желают обмениваться сообщениями с другими компаниями.
Для этого создал модель Invintation
class Invintation < ActiveRecord::Base
  belongs_to :company
  belongs_to :recipient, class_name: 'Company', foreign_key: 'recipient_id', primary_key: 'recipient_id'
  belongs_to :author, class_name: 'User', foreign_key: 'author_id'
end

В модели Company прописываю recipients
class Company < ActiveRecord::Base
  has_many :users_companies
  has_many :users, through: :users_companies
  has_many :messages
  has_many :invintations, class_name: 'Invintation', foreign_key: 'recipient_id'
  has_many :recipients, through: :invintations, class_name: 'Company'
end


но по запросу @company.recipients ничего не выходит, не могу понять как привязать одну и туже модель через througth, подскажите пожалуйста.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
Jeiwan
@Jeiwan
Компания может быть отправителем приглашения, а может быть получателем. Приглашение хранит в себе инфу об отправителе и о получателе (recipient_id и sender_id). Компания может иметь несколько отправленных приглашений и может иметь несколько приглашений от других компаний.

Invitation
belongs_to :recipient, class_name: 'Company', foreign_key: 'recipient_id'
belongs_to :sender, class_name: 'Company', foreign_key: 'sender_id'

Company
has_many :sent_invitations, class_name: 'Invitation', foreign_key: 'sender_id' — отправленные компанией приглашения
has_many :invitation_recipients, through: :sent_invitations, source: :recipient — получатели приглашений
has_many :incoming_invitations, class_name: 'Invitation', foreign_key: 'recipient_id' — полученные компанией приглашения
has_many :invitation_senders, through: :incoming_invitations, source: :sender — отправители приглашений
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы