Atransaction_record
有很多workflows
,每个workflow
都有很多milestones
。其中一个milestones
已标记current: true
,我想从transaction_record
到current_milestone
:
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
。但现在我正在更改我的数据库模式以获得更有效的负载查询。不是世界末日,但如果我已经有一个协会,这不是我的偏好。