我有一个简单的搜索操作,它有3个参数和一个搜索模型的where方法。如果我搜索并且某些参数为nil,则不会返回我想要的记录。我希望它只使用非零/空白的参数来搜索数据库。因此,如果只输入一个类别并在参数中发送,我希望我的控制器忽略其他两个参数。但是,如果存在其他参数,我希望它们包含在搜索中。
我尝试了很多方法,但我无法让它正常工作。这是我的代码。
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)
我把变量放入字符串和散列中,称为to_a,用(“,”)加入它们。什么都行不通。
谢谢
答案 0 :(得分: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)