通过第三个表加入的关联

时间:2017-09-19 13:31:08

标签: ruby-on-rails

我有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")

失败了。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据您在问题开头的评论,我猜测您的模型和迁移设置不正确。 AB模型和表格不应包含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