Ruby on rails Rails:多个参数(筛选器)的作用域为
我使用的是has_scope gem,我想用两个参数创建过滤-它可能是一个参数,也可能是两个参数 Mymodel(产品): 控制器的索引操作: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
@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版本,或者其他什么。