2009-05-17 8 views

答えて

1

ユーザーからのデータを扱っているので、私はevalから離れています。たぶんシンプルなケースステートメントを使用しますか?こうすることで、彼らがあなたに与えているデータを検証することができます。

2

私は非常に素晴らしいacts_as_filterプラグインを、named_scopesを使用してユーザー主導の結果フィルタリング用に設計しました。

http://github.com/tobyhede/acts_as_filter/tree/master

評価は、使用する罰金です - (?私は、多くの場合、単にアレイとテストaccepted_values.includeにいくつかの値をプラグ(パラメータ))が、あなたは受け入れ/期待値に対して検証を確認してください

2

のevalかなり悪い考えです。しかし、#sendはこれには完璧です。本質的に安全で、evalよりも速い(私が理解しているように)。それを行う必要があります:)に

0

をあなたが与える例えば

Product.send(params[:scope]) 

、私はあなたが欲しいクエリを作成するために一緒に明示すること、およびチェーンスコープたい:

scope = Post 
scope = scope.random if params[:scope] == 'random' 
@posts = scope.find(:all, ...) # or paginate or whatever you need to do 

のparams場合は[ :scope]はランダムではありません。これはPost.find()を呼び出すのと同じです。そうでなければPost.random.find()を実行します。

find_by_filterはかなり役に立ちます同じくらい薄いあなたのためにg。

このパターンを使用すると、相互に排他的でないものをサポートする必要がある場合は、複数のスコープをクエリに組み合わせることもできます。 ?

scope = scope.only_monsters if params[:just_monsters] == 1  
scope = scope.limit(params[:limit].to_i) unless params[:limit].to_i.zero? 

だから、取得/ポストスコープ=ランダム& just_monsters = 1つの&制限= 5はあなたを与えるだろう:私は検索でそれに出くわした

Post.random.just_monsters.limit(5).find(:all, ...) 
関連する問題