Rails - 有很多关于模型和多个参考

Rails - Has many on model with multiple references

我有一个模型 CompanyIntro,它有两个对 Company 的引用:

class CompanyIntro < ApplicationRecord
  belongs_to :company_one, class_name: "Company", foreign_key: "company_one_id"
  belongs_to :company_two, class_name: "Company", foreign_key: "company_two_id"

  ...

我想做这样的事情:

class Company < ApplicationRecord
  has_many :company_intros, class_name: 'CompanyIntro', foreign_key: 'company_one_id'
  has_many :company_intros, class_name: 'CompanyIntro', foreign_key: 'company_two_id'

...

但这无效

在我的 Company 模型中,如何为两个外键创建一个 has_many?我正在使用 Rails 6,它不允许为 has_many (afaik) 自定义 sql。我也不想在 Company 模型上编写自定义 company_intros 方法,因为我正在使用另一个 gem 来寻找我的 has_many 关系。

您不能定义外键是两列之一的 has_many 关联。它只是不受 ActiveRecord 支持,因为该功能会增加大量复杂性。

两个关联使用相同的名称也只是覆盖以前的关联。如果你想在这里有一个单一的关联,你需要添加一个连接 table.

class Company < ApplicationRecord
  has_many :company_intro_participations
  has_many :company_intros, through: :company_intro_participations
end

# for lack of a better name
class CompanyIntroParticipation < ApplicationRecord
  belongs_to :company
  belongs_to :company_intro
end

class CompanyIntro < ApplicationRecord
  has_many :company_intro_participations
  has_many :companies, through: :company_intro_participations
end

另一种方法是创建一个连接 company_one_id = companies.id OR company_two_id = companies.id 的方法,但是当涉及到预加载之类的东西时,您将无法以与关联相同的方式使用它。