我有A
模型,B
模型和Connecting
模型。
A和B的con_id
列是连接模型中的ID。
我尝试执行以下操作: 在A:
has_many :connectings
has_many : bs, :through => connectings
在B:
has_many :connectings
has_many :as, :through => connectings
然后在连接:
belongs_to :as
belongs_to :bs
然后尝试建立联接并包含查询:
A.joins(:bs).includes(:connectings).where("my_condition")
失败了。
我做错了什么?
答案 0 :(得分:0)
根据您在问题开头的评论,我猜测您的模型和迁移设置不正确。 A
和B
模型和表格不应包含con_id
列。外键应该在连接表中。
您的模型应如下所示:
class Connecting < ActiveRecord::Base
belongs_to :a # foreign key - a_id
belongs_to :b # foreign key - b_id
end
class A < ActiveRecord::Base
has_many :connectings
has_many :bs, through: :connectings
end
class B < ActiveRecord::Base
has_many :connectings
has_many :bs, through: :connectings
end
我删除您的模型并回滚您的迁移并重做它们。以下是引导您完成设置的rails guides for has_many :through associations。
从rails指南中采用的基本迁移看起来像这样:
# Hope the tables and models have better names, 'as' might cause issues.
class CreateConnectings < ActiveRecord::Migration[5.0]
def change
create_table :as do |t|
t.string :name
t.timestamps
end
create_table :bs do |t|
t.string :name
t.timestamps
end
create_table :connectings do |t|
t.belongs_to :a, index: true
t.belongs_to :b, index: true
t.timestamps
end
end
end