2013-01-21 49 views
0

我想用兩個參數來過濾我的@jobs如何在Rails中重構簡單的過濾器動作?

現在我有這樣的事情:

def filter 
    if params[:filter][:trade].present? && params[:type].present? 
     @jobs = Job.accepted.with_accepted_company.where(:trade_id => params[:filter][:trade],:job_type =>params[:type]) 
     render :index 
    elsif params[:filter][:trade].present? 
     @jobs = Job.accepted.with_accepted_company.where(:trade_id => params[:filter][:trade]) 
     render :index 
    elsif params[:type].present? 
     @jobs = Job.accepted.with_accepted_company.where(:job_type =>params[:type]) 
     render :index 
    else 
     redirect_to jobs_path 
    end 
    end 

回答

3
def filter 
    filters = { 
    :trade_id => params[:filter][:trade], 
    :job_type => params[:type] 
    } 

    filters.delete_if { |key,value| value.blank? } 

    if filters.count > 0 
    @jobs = Job.accepted.with_accepted_company.where(filters) 
    render :index 
    else 
    redirect_to jobs_path 
    end 
end 
-1
def filter 
    h = {} 
    params[:filter][:trade].tap{|v| h[:trade_id] = v if v.present?} 
    params[:type].tap{|v| h[:job_type] = v if v.present?} 
    if h.empty? 
    redirect_to jobs_path 
    else 
    @jobs = Job.accepted.with_accepted_company.where(h) 
    render :index 
    end 
end