我有一个属性模型,它使用一个字段按属性类型(properties.kind)进行排序。
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查询。显然这是非常低效的,如果我一次可以为多个用户提供服务,那就太幸运了。
我的问题是:有没有更好的方法按字符串值对数组的内容进行分组?
答案 0 :(得分:1)
您可以将这些组合成一个查询,并按如下方式确定它们的范围:
scope :listing, -> { where(kind: ["House","Apartment","Commercial"]) }
将数组传递给Where,这是SQL中IN的别名,它将覆盖一个查询中的所有3个选项。然后,您可以使用group_by
将它们拆分出来,以便将它们分配给实例变量。