IMOあなたはただ結合を使うべきです:
@circles = Circle.joins(:categories).where(:categories => { :parent_id => params[:id] })
作成したコードに対処するには:Rubyで配列に追加するには、を使用し<<
ます。したがって、次のようにコードを書き直すことができます。
@circles = []
@sub_categories.each do |sub_cat|
sub_cat.circles.each do |circle| # assumes Category has_many :circles
@circles << circle
end
end
joins
しかし、上に示したように、1つのクエリでそれを行う方がよいでしょう。
ペーストビンに基づく更新:
を設定する必要はありません@circles
。
これはあなたの見解がどのように見えるべきかです:
<% @sub_categories.each do |sub_cat| %>
<div class="circle">
<header>
<h3 data-toggle="collapse" href="#<%= dom_id(sub_cat) %>-collapse"><%=sub_cat.name %></h3>
<ul id="<%= dom_id(sub_cat) %>-collapse" class="accordion-body collapse">
<li class="list-shadow"></li>
<% sub_cat.circles.each do |circle| %>
<li><%= link_to circle.title, circle, :remote => true, :method => 'get' %></li>
<% end %>
</ul>
</header>
</div><!--.circle-->
<% end %>
N + 1クエリの問題を防ぐには、コントローラでこれを行う必要があります。
@sub_categories = Category.includes(:circles).where(:parent => params[:id])