我有两个具有habtm关联的企业模型和deal_event。这种关系适用于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
答案 0 :(得分:0)
您应该将联接表命名为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