Модель создания базовых рельсов с несколькими отношениями has_one - PullRequest
0 голосов
/ 29 октября 2019

У меня есть класс HostPublicEvent и класс Band. Мне нужен класс BandSlot, который показывает время начала Band в HostPublicEvent (часы и минуты, когда Band начинает играть во время HostPublicEvent).

В новой модели BandSlot это, вероятно, то, что должно быть:

  • has_one: band
  • has_one: host_public_event

А в модели Band:

  • has_many: band_slots

А в модели HostPublicEvent:

  • has_many: band_slots

Я думаю, что это может создать модель со ссылками, итогда я вхожу в каждую модель и настраиваю их соответственно? Это мой первый проект кодирования, спасибо!

    rails generate model BandSlot start_time_hour:integer start_time_minute:integer host_public_event:references band:references

1 Ответ

0 голосов
/ 29 октября 2019

Вы смешиваете has_one и belongs_to. Что является очень распространенной ошибкой новичка.

belongs_to идет рядом с колонкой внешнего ключа. has_one указывает на столбец внешнего ключа на другой модели .

. Инверсия has_many всегда равна belongs_to. Если вместо этого вы используете has_one, вы просто получите циклическую ссылку, где обе модели ожидают, что внешний ключ будет на другой стороне.

class BandSlot 
  belongs_to :band
  belongs_to :host_public_event
end

class Band
  has_many :band_slots
  has_many :host_public_events, through: :band_slots
end

class HostPublicEvent
  has_many :band_slots
  has_many :bands, through: :band_slots
end

В этом примере создается связь между многими из Band и HostPublicEvent с BandSlot. в качестве таблицы соединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...