transaction_record
은 workflows
이 많고, 각 workflow
은 많은 milestones
입니다. milestones
중 하나는 current: true
를 표시하고, 나는 transaction_record
current_milestone
받는 사람에서 가고 싶은 : 내가 원하는 milestone
반환하는 방법을 만들 수 있습니다레일 has_one : through 다른 모델명
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
,하지만 난 그렇게 그것을 실제 연결을 내가 할 수 만들고 싶어 DB 성능을 위해 포함하십시오.
저는 페이지를 가지고 있습니다. 여기에서 나는 각각 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
을한다. 하지만 지금은보다 효율적인로드 쿼리를 위해 DB 스키마를 변경하고 있습니다. 이미 세계가 끝난 것이 아니라 내 선호도가 아닙니다.