A transaction_record
hat viele workflows
, und jede workflow
hat viele milestones
. Einer der milestones
ist current: true
markiert, und ich will von der transaction_record
zu dem Thema current_milestone
:Schienen has_one: durch mit anderen Modellnamen
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
ich eine Methode erstellen, die die gewünschte milestone
zurückkommt, aber ich will es eine tatsächliche Vereinigung machen, so kann ich Schließen Sie es für die DB-Leistung ein.
Ich habe eine transaction_records#index
Seite, wo ich die transaction_records
und die current_milestone
für jede auflisten. Das ist ein n+1
, wenn ich das nicht herausfinden kann.
Ich möchte wirklich in der Lage sein, etwas zu tun wie:
@transaction_records = TransactionRecord.includes(:current_milestone)
<% @transaction_records.each do |transaction_record| %>
<%= transaction_record.name %> - <%= transaction_record.current_milestone.name %>
<% end %>
Update
ich eine Richtung Beziehung zwischen transaction_record
angeben und milestone
und dann transaction_record has_one :current_milestone, -> { where(current: true) }, class_name: Milestone
tun. Aber jetzt ändere ich mein DB-Schema für eine effizientere Ladeanfrage. Nicht das Ende der Welt, aber nicht meine Vorliebe, wenn ich schon eine Assoziation habe.