1

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

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

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

4

4 回答 4

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)
于 2013-09-16T11:52:34.190 回答
2

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

params.except(:action, :controller)
params[:category] = @category
@products = Product.where(params)
于 2013-09-16T09:44:02.803 回答
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

于 2013-09-16T09:35:19.420 回答
1

你可以试试Periscope gem

搜查

于 2013-09-16T09:25:08.993 回答