2012-09-10 52 views
0

我試着這樣做:初始化查詢(。凡/ .order)與空查詢

if filter_1 
    @field = @field.where() 
else 
    @field = @field.where() 
end 

if filter_2 
    @field = @field.order() 
end 

etc. 

但我怎麼初始化@field一個空的查詢?我試過@field = Field.all,但是這給了一個數組,因此不允許鏈接。

回答

2

嘗試scoped模型類例如

@fields = Field.scoped 
@fields = @fields.where("your conditions") if filter_1 
@fields = @fiels.order("your conditions") if filter_2 
1

要初始化的@field實例變量第一次,請嘗試參照類字段,即

過濾器1:@field = Field.where(...)

之後,如果你需要不斷增加,可以進一步篩選器根據需要多次引用您的變量字段。

過濾器2起:@field = @field.where(...)

由於過濾器1將返回一個有效記錄的關係,你可以嵌套多個條件子句到它。同樣,不要擔心性能問題,因爲SQL只會在實際需要時纔會生成和處理。(延遲加載)

如果您在過濾器末尾的@field.to_sql,您將能夠看到你所有的where子句已經方便地嵌套到一個SQL語句中。

另外,我建議你閱讀Active Record Query Interface

編輯

創建方法get_field。並用它來添加過濾器結果。

def get_field(field) 
    @field.is_a?(ActiveRecord::Relation) ? Field : field 
end 


get_field(@field).where(....) 
get_field(@field).where(....) 
+0

我不知道哪一行會首先初始化查詢,因爲「if filter」可能會讓您跳轉查詢。 – muichkine

+0

Aaah。請看看我的編輯。希望這會幫助你。讓我知道你是否需要任何進一步的解釋。 – sohaibbbhatti