我正在使用has_scope gem,我想用两个参数创建过滤 - 它可能是一个参数或两个同一时间。
Mymodel(产品):
scope :brand, proc { |brand| joins(:product_values).where('product_values.value_id' => brand) }
scope :zamena, proc { |zamena| joins(:product_values).where('product_values.value_id' => zamena) }
控制器的索引动作:
@products = apply_scopes(Product).all
它有效,但只有一个:(
/products?brand=12 - Ok
/products?zamena=24 - Ok
/products?brand=12&zamena=24 - Fail (sorted only by 'zamena', not by both params)
第二。变体(不适用) 在我的控制器中:
query = Product.scoped
query = query.brand(params[:brand]) if params[:brand]
query = query.zamena(params[:zamena]) if params[:zamena]
@products = query.all
由一个工作,但不是两个工作(0个结果)。
答案 0 :(得分:-1)
我的回答。也许不优雅,但效果很好。
fcount = 0
fcount += 1 if params[:brand]
fcount += 1 if params[:zamena]
prods = []
if params[:brand]
Product.all.each do |p|
prods << p if p.product_values.where(value_id: params[:brand]).count > 0
end
end
if params[:zamena]
Product.all.each do |p|
prods << p if p.product_values.where(value_id: params[:zamena]).count > 0
end
end
@products = prods.select{|item| prods.count(item) == fcount}.uniq
不需要范围。您可以使用这种方式使用大量过滤器。