Rails - 想知道是否有更高效的方法来做到这一点?
问题描述:
我有一个属性模型,它使用一个字段按属性类型(properties.kind)排序。Rails - 想知道是否有更高效的方法来做到这一点?
class Property < ActiveRecord::Base
scope :house, -> { where(kind: "House") }
scope :apartment, -> { where(kind: "Apartment") }
scope :commercial, -> { where(kind: "Commercial") }
end
然后,在我的属性控制器中,我将它们组合成一个数组,以便可以按视图中的类型对它们进行分组。
class PropertiesController < ApplicationController
def index
@house = Property.house.all
@apartment = Property.apartment.all
@commercial = Property.commercial.all
@listing = [@house, @apartment, @commercial]
end
问题突出给我的是模型必须在同一个表上为每个索引操作执行至少3个SQL查询。显然,这是超效率的,如果我一次可以服务一个以上的用户,那就太幸运了。
我的问题是这样的:有没有更好的方法来组合数组的内容的字符串值?
答
您可以结合这些成一个单一的查询,并让他们作用域如下:
scope :listing, -> { where(kind: ["House","Apartment","Commercial"]) }
将数组传递给哪里是在SQL别名为IN,将覆盖在一个查询中的所有3个选项。然后你可以用group_by
将它们分配给实例变量。
谢谢你的简单和优雅的解决方案! – greyoxide 2014-11-03 18:45:15