0

私は3つのモデルを持っています:

#Client.rb
has_many :contracts
has_many :accessories,  :through => :contracts

#Contract.rb
has_and_belongs_to_many :accessories
belongs_to :client

#Accessory.rb
has_and_belongs_to_many :contracts
belongs_to :pay_interval
has_many :clients, :through => :contracts

クライアントのshow.html.erbビュー ページで、すべてのクライアントのアクセサリと、アクセサリが属するコントラクト ID を一覧表示したいと考えています。例えば:

<% @client.accessories.each do |a| %>
  <%= a.name %>
  <%= a.contract.id %>
<% end %>

ただし、contractアクセサリからはアクセスできず、契約のみ(複数)ですが、2回目のループは避けたいです。では、どうすればこれを行うことができますか?

4

1 に答える 1

1

contractアクセサリからはアクセスできません

これが混乱のポイントです。

<%= a.contract.id %>

何をしようとしているのかが不明確になります。contract経由でアクセスできないわけではありませんAccessory。それは関連付けAccessory がありませんcontract


最初contractの for eachAccessoryが必要であると仮定すると、クエリで使用.includeしてテーブルに対して結合を強制しcontracts、n+1 クエリの問題を回避できます

<% @client.accessories.includes(:contracts).each do |a| %>
  <%= a.name %>
  <%= a.contracts.first.id %>
<% end %>
于 2012-08-25T23:43:41.227 に答える