这是我用来查询的两个模型:
模型1
has_many :locks_order_items, dependent: :destroy
has_many :locks, through: :locks_order_items
模型2
belongs_to :order_item
belongs_to :lock
表格
<%= f.fields_for :order_items, @order_items do |f1| %>
<% f1.object.locks_order_items.order("locks_order_items.check
DESC, locks_order_items.id ASC").each do |m|
<li> <%= m.lock.name %> </li>
<input type='hidden' name='order[order_items_attributes][<%= row_count
%>][locks_order_items_attributes][][lock_id]' value='<%= m.lock_id %>'
/>
end %>
<% end %>
当表单加载时,这是运行的查询:
SELECT "locks_order_items".* FROM "locks_order_items" WHERE
"locks_order_items"."order_item_id" = 4444 ORDER BY
locks_order_items.check DESC, locks_order_items.id ASC
如果模型2中有10个条目,则上述查询将运行10次。我试图添加包含,但它仍然像那样运行。
有没有办法在包含?
的一个查询中运行它答案 0 :(得分:0)
在控制器中选择,过滤和订购模型,而不是在视图中。您的观点应该只显示给出的内容。
因此,在控制器中订购模型并使用includes()
解析N+1
次查询:
@results = YourModel.includes(:locks_order_items).where({your: :query}).
order("locks_order_items.check DESC, locks_order_items.id ASC")
在您的视图中,只渲染您的收藏。