搜索忽略某些空白参数

时间:2012-09-03 18:14:52

标签: ruby-on-rails activerecord ruby-on-rails-3.2

我有一个简单的搜索操作,它有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,用(“,”)加入它们。什么都行不通。

谢谢

1 个答案:

答案 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)