某些条件不存在时的Active Record查询

时间:2013-09-16 09:20:49

标签: ruby-on-rails activerecord

我有以下哈希条件用于从数据库中检索products

@products = Product.where(category: @category, color: params[:color], brand_id: params[:brand], size: params[:size]).

例如,当没有提供一个或多个条件时,是否有办法获取查询结果 如果params[:color]不存在,我如何检索其他条件的产品?或者我如何重组条件来实现这一目标?

4 个答案:

答案 0 :(得分:2)

你也可以使用这样的东西: -

params.except(:action, :controller)
params[:category] = @category
@products = Product.where(params)

答案 1 :(得分:2)

我将基于techvineet的回答(编辑变得混乱)。

试试这个:

# This line throws away the :action and :controller arguments
params.except!(:action, :controller) # notice the ! now
params.delete_if {|k,v| v.nil?} # throw out any empty args
params[:category] = @category
@products = Product.where(params)

答案 2 :(得分:1)

您可以尝试Periscope gem

Ransack

答案 3 :(得分:1)

您可以使用以下条件构建查询:

product_scope = Product.where(:category => @category)
product_scope = product_scope.where(:color => params[:color]) if params[:color]
# (...)

@products = product_scope.all

这样,只有有效和现有条件被添加到范围中。或者您可以以类似的方式使用您的选项构建哈希,并仅添加具有有效参数的键,然后调用Product.where(conditions_hash).all