2012-05-18 2 views
0

RoR에서 쿼리를 만들려고하지만 매개 변수에서 동적으로 변경됩니다.RoR의 동적 조건 쿼리

나는 이것을 시도했다 :

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

그냥 내 상상력,하지만 무슨 뜻인지 보여줍니다.

고맙습니다

답변

1

당신은 레일 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

위대해 보였습니다. 내가 필터를 만들려고한다는 것은 옳다. 하지만 첫 번째 요청 후 params가 이름이 저장되고 결과를 변경하지 않는 새 매개 변수를 추가하는 것처럼 보입니다. 죄송합니다 – antsav

+0

은 매개 변수 주위에 중괄호를 깜박입니다. 내 잘못이야. – pjammer