Прочтите о опции foreign_key для has_many
.
class Event < ApplicationRecord
belongs_to :creator, foreign_key: :user_id, class_name:'User'
has_many :hosts
has_many :attendees, through: :hosts
end
Эти ассоциации моделей неверны, ошибка во второй строке.
class Event < ApplicationRecord
belongs_to :creator, foreign_key: :user_id, class_name:'User'
has_many :hosts
has_many :attendees, through: :hosts
end
Для этих ассоциаций моделей вам необходимо указать foreign_key
для оператора has_many :hosts
.
class Host < ApplicationRecord
belongs_to :attended_event, class_name:"Event"
belongs_to :attendee, class_name:"User"
end
Вот мои предложения:
Пользователь
class User < ApplicationRecord
has_many :created_events, foreign_key: 'user_id'
has_many :hosts, foreign_key: 'attendee_id'
has_many :attended_events, through: :hosts
end
Хост
class Host < ApplicationRecord
belongs_to :attended_event, class_name: 'Event'
belongs_to :attendee, class_name: 'User'
end
Событие
class Event < ApplicationRecord
belongs_to :creator, class_name: 'User'
has_many :hosts, foreign_key: 'attended_event_id'
has_many :attendees, through: :hosts
end
Миграция ваших хостов
Лучше не указывать здесь foreign_key
, он будет искать таблицу attendees
и таблицу attended_events
в базе данных.
class CreateHosts < ActiveRecord::Migration[6.0]
def change
create_table :hosts do |t|
# t.references :attendee, null: false, foreign_key: true
t.references :attendee, null: false
# t.references :attended_event, null: false, foreign_key: true
t.references :attended_event, null: false
t.timestamps
end
end
end