Ruby on rails 忽略某些空白参数进行搜索

Ruby on rails 忽略某些空白参数进行搜索,ruby-on-rails,activerecord,ruby-on-rails-3.2,Ruby On Rails,Activerecord,Ruby On Rails 3.2,我有一个简单的搜索动作,它有3个参数和一个where方法来搜索模型。如果我搜索并且某些参数为零,它将不会返回我想要的记录。我希望它只使用非nil/blank的参数来搜索数据库。因此,如果在参数中只输入并发送一个类别,我希望我的控制器忽略其他两个参数。但是,如果存在其他参数,我希望将它们包括在搜索中 我尝试过很多方法,但都不能让它正常工作。这是我的密码 hash = [] cat = :category_id => params[:category_id] col = :color_id =

我有一个简单的搜索动作,它有3个参数和一个where方法来搜索模型。如果我搜索并且某些参数为零,它将不会返回我想要的记录。我希望它只使用非nil/blank的参数来搜索数据库。因此,如果在参数中只输入并发送一个类别,我希望我的控制器忽略其他两个参数。但是,如果存在其他参数,我希望将它们包括在搜索中

我尝试过很多方法,但都不能让它正常工作。这是我的密码

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)
我将变量放入字符串和散列中,称为_a,并用(“,”)连接它们。什么都不管用

谢谢

试试这段代码

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) 

正是我所追求的,如此美丽的小:)