A transaction_record
有許多workflows
,並且每個workflow
有許多milestones
。其中一個milestones
的標記current: true
,我想從transaction_record
到current_milestone
去:Rails has_one:通過不同的型號名稱
class TransactionRecord < ApplicationRecord
has_many :workflows
has_many :milestones, through: :workflows
# DOES NOT WORK, but what I want to do...
has_one :current_milestone, through: :workflows, class: Milestone, source: :milestones
# Works, but want to make an association for including
def current_milestone
milestones.where(current: true).first
end
end
class Workflow < ApplicationRecord
belongs_to :transaction_record
has_many :milestones
end
class Milestone < ApplicationRecord
belongs_to :workflow
end
我可以創建一個返回所需milestone
的方法,但我想讓它實際的關聯,所以我可以包括它的數據庫性能。
我有一個transaction_records#index
頁面,其中我列出了每一個transaction_records
和current_milestone
。這是一個n+1
,除非我能弄清楚。
我真的希望能夠做類似:
@transaction_records = TransactionRecord.includes(:current_milestone)
<% @transaction_records.each do |transaction_record| %>
<%= transaction_record.name %> - <%= transaction_record.current_milestone.name %>
<% end %>
更新
我可以指定transaction_record
與milestone
間的方向關係,然後做transaction_record has_one :current_milestone, -> { where(current: true) }, class_name: Milestone
。但現在我正在更改我的數據庫模式以獲得更高效的負載查詢。不是世界末日,但如果我已經有一個聯想,那不是我的偏好。