我試着這樣做:初始化查詢(。凡/ .order)與空查詢
if filter_1
@field = @field.where()
else
@field = @field.where()
end
if filter_2
@field = @field.order()
end
etc.
但我怎麼初始化@field
一個空的查詢?我試過@field = Field.all
,但是這給了一個數組,因此不允許鏈接。
我試着這樣做:初始化查詢(。凡/ .order)與空查詢
if filter_1
@field = @field.where()
else
@field = @field.where()
end
if filter_2
@field = @field.order()
end
etc.
但我怎麼初始化@field
一個空的查詢?我試過@field = Field.all
,但是這給了一個數組,因此不允許鏈接。
嘗試scoped
模型類例如
@fields = Field.scoped
@fields = @fields.where("your conditions") if filter_1
@fields = @fiels.order("your conditions") if filter_2
要初始化的@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(....)
我不知道哪一行會首先初始化查詢,因爲「if filter」可能會讓您跳轉查詢。 – muichkine
Aaah。請看看我的編輯。希望這會幫助你。讓我知道你是否需要任何進一步的解釋。 – sohaibbbhatti