我有以下哈希条件用于从数据库中检索products
:
@products = Product.where(category: @category, color: params[:color], brand_id: params[:brand], size: params[:size]).
例如,当没有提供一个或多个条件时,是否有办法获取查询结果
如果params[:color]
不存在,我如何检索其他条件的产品?或者我如何重组条件来实现这一目标?
答案 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
答案 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