2012-09-03 212 views
0

我有一個簡單的搜索操作,它有3個參數和一個where方法來搜索模型。如果我搜索並且某些參數爲零,它將不會返回我想要的記錄。我希望它只通過使用不爲零/空白的參數來搜索數據庫。因此,如果只輸入一個類別並在參數中發送,我希望我的控制器忽略其他兩個參數。但是,如果其他參數存在,我希望它們包含在搜索中。搜索忽略某些空白參數

我已經嘗試了很多方法,但我無法讓它正常工作。這是我的代碼。

hash = [] 
cat = :category_id => params[:category_id] 
col = :color_id => params[:color_id] 
brand = :brand_id => params[:brand_id] 

if params[:category_id].present? 
    hash += cat 
end 

if params[:color_id].present? 
    hash += col 
end 

if params[:brand_id].present? 
    hash += brand 
end 

@results = Piece.where(hash).preload(:item).preload(:user).group(:item_id).paginate(:page => params[:page], :per_page => 9) 

我已經把變量轉換爲字符串和hashs,叫to_a,用加入了他們( 「」)。什麼都沒有

謝謝

回答

2

試試這個代碼。

criteria = { :category_id => params[:category_id], :color_id => params[:color_id], 
    :brand_id => params[:brand_id] }.select { |key,value| value.present? } 


@results = Piece.where(criteria).preload(:item).preload(:user).group(:item_id). 
    paginate(:page => params[:page], :per_page => 9) 
+0

很好用!謝謝! – Dol

+0

正是我所尋找的,如此美麗的小:) –