1

検索フォームのスコープ文字列を作成しようとしています。スコープを使用してこのようなものを構築できますか:

scopestring = Product.all 
if params[:price].include? 
  scopestring = scopestring + '.free'
if params[:location].include? 
  # same for location 
end 

明らかにそれはできませんが、同様のことを行う方法はありますか。助言がありますか?検索ページでさまざまなフィルターを処理するための 9 つの条件 IF または case ステートメントのファンではありません。

ここで完全に間違った方向に進んでいる場合、Rails で長い条件文を処理する最善の方法は何ですか? 私は宝石から離れることを好む。

4

1 に答える 1

2

まず、Product.allスコープではなく、実際に検索を行います。あなたが欲しいのはですProduct.scoped。返されるスコープは、文字列ではなくオブジェクトです。:freeそれがスコープであると仮定します:

products = Product.scoped
if params[:price] == "free"  #your example of include? doesn't make sense
  products = products.free
end

モデルにリファクタリングすることで、もう少し単純化できます。

class Product < ActiveRecord::Base
  scope :free, lambda {|free| free.nil? ? {} : where(:price => 0)}
end

そして、コントローラーで:

@products = Product.free(params[:price])
于 2012-07-15T23:27:28.297 に答える