products
我有以下用于从数据库中检索的哈希条件:
@products = Product.where(category: @category, color: params[:color], brand_id: params[:brand], size: params[:size]).
当没有提供一个或多个条件时,有没有办法获得查询结果,例如如果params[:color]
不存在,我如何检索具有其他条件的产品?或者我如何重组条件来实现这一点?
products
我有以下用于从数据库中检索的哈希条件:
@products = Product.where(category: @category, color: params[:color], brand_id: params[:brand], size: params[:size]).
当没有提供一个或多个条件时,有没有办法获得查询结果,例如如果params[:color]
不存在,我如何检索具有其他条件的产品?或者我如何重组条件来实现这一点?
我将以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)
你也可以使用这样的东西: -
params.except(:action, :controller)
params[:category] = @category
@products = Product.where(params)
您可以使用以下条件构建查询:
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
你可以试试Periscope gem
或搜查