Просто сделайте следующее,
class Order < ApplicationRecord
belongs_to :estimate # default foreign_key is estimate_id
belongs_to :finalized_estimate, class_name: "Estimate", foreign_key: 'finalized_estimate_id', optional: true
belongs_to :cost_price_estimate, class_name: "Estimate", foreign_key: 'cost_price_estimate_id', optional: true
end
Отдых в порядке.:)
Объяснение:
Рельсы предпочитают соглашение по конфигурации (COC) т.е.
Когда вы пишете finalized_estimate
,Он ищет модель FinalizedEstimate
вместо Estimate
по соглашению и ищет finalized_estimate_id
, поэтому вы должны предоставить ее явно.
Для belongs_to :estimate
, он получает класс Estimate
& foreign_key estimate_id
неявно.
С другой стороны,
class Estimate < ApplicationRecord
has_many :orders
has_many :finalized_order, class_name: "Order", foreign_key: 'finalized_estimate_id'
has_many :cost_price_order, class_name: "Order", foreign_key: 'cost_price_estimate_id'
end
Здесь первичный ключ всегда присутствует в таблице orders
как id