これらの関連付けを持つ 2 つのモデルがあります。
class Product < ActiveRecord::Base
has_many :side_orders
has_many :garnishes, :through => :side_orders
attr_accessible :garnishes_number
end
ガーニッシュも製品であるため、自己結合された関連付けです。
class SideOrder < ActiveRecord::Base
belongs_to :product
belongs_to :garnish, :class_name => "Product", :foreign_key => "garnish_id"
attr_accessible :list_number
end
1 つの製品に多数の付け合わせのリストが含まれる場合があります (お客様が 1 つの製品を注文するときに、異なる付け合わせを選択できるようにするため)。選択肢ごとに 1 つのリストです。1 つの商品の選択肢リストが「garnishes_number」個までです。
私のアプリケーションでは、管理部分で、次のようなことをしなければなりません:
<% Product.all.each do |product| %>
<% for i in 0..(product.garnishes_number - 1) %>
Lists of garnishes:
<%= product.garnishes.where("side_orders.list_number = ?", i) %> <br />
<% end %>
<% end %>
これは単なる例です...問題は、Railsが「i」の値ごとに1つのクエリを実行することです。したがって、製品に8つのリストがある場合、Railsはデータベースに対して8つのクエリを実行します...そして、数百を超える製品がある場合、それは本当に遅くなります...
そのようなクエリを最適化する方法はありますか? インクルードが機能していないようです...誰かが何か考えがあるか、別のロジックを持っている場合は、遠慮なく答えてください。
[編集]ガーニッシュの各リストにアクセスしたいという事実は重要です。なぜなら、それらを次のようにテーブルに表示したいからです。
<table>
<thead>
<td>Product</td>
<td>List of garnishes </td>
</thead>
<tbody>
<% Product.all.each do |product| %>
<% for i in 0..(product.garnishes_number - 1) %>
<tr>
<td>product.name</td>
<td>
List number <%= i %>:
<%= product.garnishes.where("side_orders.list_number = ?", i) %>
</td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
質問を長くしたくなかったので、そもそもそれを入れませんでした...しかし、私の問題をより理解しやすくするために、すでに書き留めておくべきだったと思います...申し訳ありません^ ^'
どうもありがとう!クルガル。