2014-11-03 34 views
0

我有一個屬性模型,它使用一個字段按屬性類型(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查詢。顯然,這是超效率的,如果我一次可以服務一個以上的用戶,那就太幸運了。

我的問題是這樣的:有沒有更好的方法來組合數組的內容的字符串值?

回答

1

您可以結合這些成一個單一的查詢,並讓他們作用域如下:

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

將數組傳遞給哪裏是在SQL別名爲IN,將覆蓋在一個查詢中的所有3個選項。然後你可以用group_by將它們分配給實例變量。

+0

謝謝你的簡單和優雅的解決方案! – greyoxide 2014-11-03 18:45:15

相關問題