如何使用 class_name 到 link 两个特定列

How do I use class_name to link two specific columns

我有一个名为 Company 的模型,该模型用于公司和客户,我知道这不是 companies/clients 的最佳方法,但我正在开发的软件就是以这种方式构建的,并且改变那个,这需要几个月的工作。

class Company < ActiveRecord::Base
  has_many :companies
  belongs_to :company
  has_many :orders, dependent: :destroy
end

我的另一个模型是订单,其中公司由 company_id 列链接,客户由 customer_id 列链接,即订单链接到公司和客户那家公司。

class Order < ActiveRecord::Base
  belongs_to :company
end

目前,我创建了一个获取客户的方法,但我想调用 has_one 从订单中获取客户,但我无法指向 customer_id列的订单到公司id列使用railsclass_name

如果我正确理解了你的问题(在第一段中你提到了客户,在第二段中你说的是客户,所以我假设客户 == 客户并且客户也是一个 Company 对象)你正在尝试为此:

class Order < ActiveRecord::Base
  belongs_to :company

  has_one :customer, class_name: 'Company'
end

这似乎不正确,但应该是 belongs_to:

class Order < ActiveRecord::Base
  belongs_to :company
  belongs_to :customer, class_name: 'Company'
end

这应该可以,但您也可以指定 foreign_key:

belongs_to :customer, class_name: 'Company', foreign_key: :customer_id

来自文档:https://api.rubyonrails.org/v7.0.2.4/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_one

has_one specifies a one-to-one association with another class. This method should only be used if the other class contains the foreign key. If the current class contains the foreign key, then you should use belongs_to instead.