0

私は has_scope gem を使用しており、2 つのパラメーターを使用してフィルター処理を作成したいと考えています。1 つのパラメーターまたは 2 つのパラメーターを同時に使用することもできます。

マイモデル (製品):

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

それは機能しますが、1つだけです:(

/products?brand=12 - Ok
/products?zamena=24 - Ok
/products?brand=12&zamena=24 - Fail (sorted only by 'zamena', not by both params)

2番目。バリアント(機能しません) 私のコントローラーでは:

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

両方ではなく、一方だけで機能します (0 件)。

4

1 に答える 1

-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

スコープは必要ありません。この方法を使用すると、多くのフィルターを使用できます。

于 2012-12-20T21:49:36.630 に答える