我試圖在RoR中進行查詢,但我的條件來自params並動態更改。RoR中的動態條件查詢
我已經試過這樣:
@userlist = User.find(:all, conditions:{(name:params[:name] if params[:name] != nil), (lastname:params[:lastname] if params[:lastname] != nil)})
這只是我的想象,但顯示了我的意思。
感謝名單
我試圖在RoR中進行查詢,但我的條件來自params並動態更改。RoR中的動態條件查詢
我已經試過這樣:
@userlist = User.find(:all, conditions:{(name:params[:name] if params[:name] != nil), (lastname:params[:lastname] if params[:lastname] != nil)})
這只是我的想象,但顯示了我的意思。
感謝名單
如果你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?
等。
,你可以這樣做:
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
聲明。
不幸的是,只有名字或姓氏才能使用。僅當兩個參數都存在時才起作用。對不起 – antsav
更新了我的答案。試試看。我想這可能是它不起作用的原因。 – ok32
多數民衆贊成真棒!非常感謝。效果很好! – antsav