我正在构建一个餐厅应用程序,它允许餐厅在线创建菜单。现在我们的页面在初始页面加载时加载了 6 个项目,然后无限滚动交互接管,因为他们继续向下滚动页面并通过 AJAX 动态加载另外 6 个项目。
一切正常,但我无法限制我的数据库关联的字段。例如,我的物品有自己的尺寸,这些尺寸是在物品模型中建立的
has_many :sizes
然后我使用
item.sizes
为了组织我的数据以通过 json 返回,我使用以下方法(尽管我非常欢迎这种方法的改进):
items = Item.where("blah blah")
items.each do |item|
item[:sizes] = item.sizes
end
render :json => {:items => items}
所有这些都有效并且足够简单,但是当我尝试限制从数据库返回的选定列时,我开始出现奇怪的行为。我不确定是什么原因造成的。我试过这样做:
item[:sizes] = item.sizes.select("id, name, price")
我也尝试过这样做:
item[:sizes] = item.sizes.to_json(:only => [:id, :name, :price])
这两种方法都只能在服务器端返回请求的字段,但是在请求和返回到 Web 浏览器之间似乎发生了一些事情(我的猜测是它是由 render 方法引起的),这似乎是撤消我唯一的字段选择器,而是发回所有数据库数据(因此,我收到的不仅仅是 id、name、price,而是大约 20 个不必要的数据字段)。
我正在寻找任何可能有助于完成这项工作的建议。此外,如果有人有任何其他关于改进查询时间的方法的信息,那也将不胜感激。我已经涵盖了所有基本教程,并且在访问项目之前已经使用了预加载(我想知道这是否与我的问题有关?),但我正在努力寻找好的解决方案来防止造成瓶颈通过这些 to_json 和 render :json 方法。
目前,在数据库上需要大约 400 毫秒的一系列查询在 render :json 中需要额外的 1000 毫秒。