Rails - 想知道是否有更有效的方法来做到这一点?

时间:2014-11-03 17:14:27

标签: ruby-on-rails

我有一个属性模型,它使用一个字段按属性类型(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查询。显然这是非常低效的,如果我一次可以为多个用户提供服务,那就太幸运了。

我的问题是:有没有更好的方法按字符串值对数组的内容进行分组?

1 个答案:

答案 0 :(得分:1)

您可以将这些组合成一个查询,并按如下方式确定它们的范围:

scope :listing, -> { where(kind: ["House","Apartment","Commercial"]) }

将数组传递给Where,这是SQL中IN的别名,它将覆盖一个查询中的所有3个选项。然后,您可以使用group_by将它们拆分出来,以便将它们分配给实例变量。