У меня есть две модели предприятия и deal_event с ассоциацией habtm. Это отношение работает с create, и когда я это делаю
Enterprise.last.deal_events
но выдает ошибку
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "deal_events_enterprises" does not exist LINE 1: ...CT "enterprises".* FROM "enterprises" INNER JOIN "deal_even...
когда я делаю
DealEvent.last.enterprises
Мои модели
enterprise.rb
has_and_belongs_to_many :deal_events
deal_event.rb
has_and_belongs_to_many :enterprises
миграция
class CreateDealEventsEnterprisesJoinTable < ActiveRecord::Migration[5.1]
def change
create_join_table :deal_events, :enterprises do |t|
t.index :deal_event_id
t.index :enterprise_id
end
end
end





Вы должны назвать объединяемую таблицу как deal_event_enterprises (не обращайте внимания на deal_event во множественном числе). Ваша миграция выглядит так
class CreateDealEventEnterprises < ActiveRecord::Migration[5.1]
def change
create_table :deal_event_enterprises do |t|
t.integer :deal_event_id
t.integer :enterprise_id
end
end
end
Ваши ассоциации has_and_belongs_to_many должны работать нормально, если вы перенесете свою таблицу соединений как deal_event_enterprises со столбцами deal_event_id и enterprise_id.
Тем не менее, я бы рекомендовал определить ваши отношения «многие ко многим» с has_many :through, определив класс модели DealEventEnterprise для вашей таблицы соединений.
Это сделало бы ваш код более подробным, и вы могли бы добавить дополнительную логику в свою модель соединения, когда это необходимо. Настройка has_many :through выглядит так:
class DealEventEnterprise < ApplicationRecord
belongs_to :deal_event
belongs_to :enterprise
end
class Enterprise < ApplicationRecord
has_many :deal_event_enterprises
has_many :deal_events, through: :deal_event_enterprises
end
class DealEvent < ApplicationRecord
has_many :deal_event_enterprises
has_many :enterprises, through: :deal_event_enterprises
end