Ruby on rails Rails:多个参数(筛选器)的作用域为

Ruby on rails Rails:多个参数(筛选器)的作用域为,ruby-on-rails,scope,has-scope,Ruby On Rails,Scope,Has Scope,我使用的是has_scope gem,我想用两个参数创建过滤-它可能是一个参数,也可能是两个参数 Mymodel(产品): 控制器的索引操作: @products = apply_scopes(Product).all query = Product.scoped query = query.brand(params[:brand]) if params[:brand] query = query.zamena(params[:zamena]) if params[:zamena] @pro

我使用的是has_scope gem,我想用两个参数创建过滤-它可能是一个参数,也可能是两个参数

Mymodel(产品):

控制器的索引操作:

 @products = apply_scopes(Product).all
query = Product.scoped
query = query.brand(params[:brand]) if params[:brand]
query = query.zamena(params[:zamena]) if params[:zamena]
@products = query.all
它有效,但只有一个:(

2.变体(不太适用) 在我的控制器中:

 @products = apply_scopes(Product).all
query = Product.scoped
query = query.brand(params[:brand]) if params[:brand]
query = query.zamena(params[:zamena]) if params[:zamena]
@products = query.all

一个有效,但不是两个都有效(0个结果)。

我的答案。可能不优雅,但效果不错

  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
fcount=0
如果参数[:品牌]
如果参数[:zamena],则fcount+=1
产品=[]
如果参数[:品牌]
Product.all.each do|p|
戳0
终止
终止
如果参数[:zamena]
Product.all.each do|p|
戳0
终止
终止
@products=prods.选择{| item | prods.count(item)==fcount}.uniq

不需要作用域。您可以使用这种方式使用许多筛选器。

您期望的行为是什么?两个作用域完全相同。您要求的是
product\u values.value\u id==12
product\u values.value\u id==24
的所有产品。您不能期望同一属性有两个单独的值。确切地说。我想同时获得值为12和值为24的产品(产品通过产品值有很多值)。谢谢。我理解这个问题,但还没有解决:)看看这里:Rogier,谢谢,但不适合我。也许“作用域”方法不同于3.1 rails版本,或者其他什么。