belongs_to
поместит внешний ключ в объявляющей модели, тогда как has_one
будет поместить его в другой модели. В этом есть хорошие ресурсы, которые я бы рекомендовал взглянуть на них. Вот one.
Так что для модели событий я хотел бы сделать следующее:
$ rails g migration AddVenueToEvents
Затем заполните ее:
class AddVenueToEvents < ActiveRecord::Migration
def change
add_reference :events, :venue, index: true, foreign_key: true
end
end
Я настоятельно рекомендую сделать использование что-то вроде драгоценного камня Shoulda в комбинации с RSpec, поскольку он дает чрезвычайно ценные отзывы о том, что вы должны делать. Что позволит вам писать некоторые спецификации:
RSpec.describe Events, type: :model do
#Associations
it { should belong_to(:venue) }
it { should have_one(:lineup) }
it { should have_many(:artists).through(:lineup) }
Удивительным является то, что, как только вы запустите ваши спецификации Shoulda/RSpec даст вам очень полезную обратную связь в терминале, по существу говорит вам, где необходимый внешний ключ может отсутствовать , Сообщение может выглядеть следующим образом:
Region should have a city
Failure/Error: should belong_to(:city)
Expected Region to have a belongs_to association called city (Region does not have a city_id foreign key.)
# ./spec/models/region_spec.rb:5:in `block (2 levels) in <top (required)>'
, как показано в этом other SO post что несколько связаны между собой.
Я не указал это в своем посте, но все эти модели уже существуют. Не могли бы вы переписать свой ответ как дополнение к существующим моделям? Спасибо! – sivanes
Добавлены миграции, если они существуют ... – sebsonic2o