2012-09-03 150 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

正是我所寻找的,如此美丽的小:) –