如何使用 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
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.
我有一个名为 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
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.