A transaction_record
は多くがworkflows
であり、workflow
は多くがmilestones
です。 milestones
の一つはcurrent: true
にマークされ、私はtransaction_record
current_milestone
にから行きたい:私は希望milestone
返すメソッドを作成することができますRails 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_record
とmilestone
間の方向関係を指定し、[transaction_record has_one :current_milestone, -> { where(current: true) }, class_name: Milestone
を行うことができます
@transaction_records = TransactionRecord.includes(:current_milestone)
<% @transaction_records.each do |transaction_record| %>
<%= transaction_record.name %> - <%= transaction_record.current_milestone.name %>
<% end %>
更新
を。しかし、今私はより効率的なロードクエリのために自分のDBスキーマを変更しています。世界の終わりではありませんが、私が既に団結しているなら私の好みではありません。