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将它们分配给实例变量。

+0

谢谢你的简单和优雅的解决方案! – greyoxide 2014-11-03 18:45:15