我有一个具有_and_belongs_to_many 美食的商店模型。这是控制器操作和编辑表单。
应用程序/控制器/shops_controller.rb
class ShopsController < ApplicationController
def edit
@shop = Shop.where(id: params[:id]).first
@cuisines = Cuisine.asc(:name)
end
end
应用程序/视图/商店/edit.html.haml
= simple_nested_form_for @shop do |f|
.control-group
.control-label
= f.link_to_add 'Cuisine', :cuisines
.controls
= f.fields_for :cuisines do |cuisine|
= cuisine.input :id, label: false, collection: @cuisines
= link_to t_action(:remove)
问题是@cuisines 被评估的次数与商店的菜肴数量一样多。第一次执行后,它不会缓存查询。
在搜索并尝试了不同的解决方案以减少查询后,我只能发现使用以下任何一种方法都会有所帮助。
@cuisines = Cuisine.asc(:name).to_a
或者
@cuisines = Cuisine.asc(:name).entries
或者
@cuisines = Cuisine.asc(:name).cache
有人可以建议我做自动缓存之类的其他选择吗?