2012-05-18 25 views
0

我試圖在RoR中進行查詢,但我的條件來自params並動態更改。RoR中的動態條件查詢

我已經試過這樣:

@userlist = User.find(:all, conditions:{(name:params[:name] if params[:name] != nil), (lastname:params[:lastname] if params[:lastname] != nil)}) 

這只是我的想象,但顯示了我的意思。

感謝名單

回答

1

如果你on Rails的3:

@userlist = User.scoped 
@userlist = @userlist.where(name: params[:name]) if params[:name].present? 
@userlist = @userlist.where(lastname: params[:lastname]) if params[:lastname].present? 

等。

+0

不幸的是,只有名字或姓氏才能使用。僅當兩個參數都存在時才起作用。對不起 – antsav

+0

更新了我的答案。試試看。我想這可能是它不起作用的原因。 – ok32

+0

多數民衆贊成真棒!非常感謝。效果很好! – antsav

0

,你可以這樣做:

BlahController < ActiveController::Base 
    before_filter :find_params, :only => :index 

    def index 
    @user_list = User.where(@filtered_params).all 
    end 

    def find_params 
    @filtered_params = params[:name].present? ? "'name = ?', #{params[:name]}" : "'last_name = ?', #{params[:last_name]}" 
    end 

end 

所以我假設你只有兩個條件,一個params[:name]或一個params[:last_name]。如果還有更多,只需將三元數更改爲if elsif聲明。

+0

看起來不錯,我試過了。你完全正確的,我正在試圖建立一個過濾器。但在第一次請求後,似乎名稱的參數被保存,甚至添加新的參數而不會改變結果。對不起 – antsav

+0

忘記了參數周圍的花括號。我的錯。 – pjammer