2012-04-09 4 views
0

私はすべてのすべてで19個のブール値はブール値"OR-join"を使ってクエリとしてハッシュを渡す方法は?

({"u25" => true, "f26t49" => true, "o50" => true, ..}); 

とハッシュがあるしていると私は少なくとも一つの試合を持っているか、私のDB内のテーブルでこれらをチェックし、それらのデータ・セットを取得したいです。 ==: "(条件=>ハッシュ)Model.all" または "Model.where(ハッシュ)"

が、私は、クエリ

」..u25をそこに着く私は

でそれを試してみました真のf26t49 == trueまたはø50==真... "

しかし、私はこのような何かが必要です。

" ..u25を==真== trueまたはf26t49 ...」

私を助けてくれることを願っています!

ADDITION:

私は回避策を作成し、ハッシュのうち、クエリ文字列を生成するためにしようと試みました。私は(M = Model.where( "U25 == 'T'"))、直接この文字列を記述する場合、それは動作しますが、私はmよりvaraible

@query = '"u25 == ' + "'t'" + '"' 

m = Model.where(@query) 

を渡した場合はnilです!

+0

これらの条件は常にtrueですか?もしそうなら、[u25、f26t49、...]のような配列しか必要ないはずです、そうですか? – Ashitaka

答えて

1

あなたの回避策が正しい方向に向いていると思います。

# model.rb 
def self.search_with_conditions(hash) 
    query = hash.map{|k,v| "#{k} == #{v}"}.join(' OR ') 
    where(query) 
end 

そして、あなたのコントローラでは、単に呼び出します:ここで私はどうなるのかだ

m = Model.search_with_conditions(hash) 

追記を:これが真の値として、いくつかの使用1として他の人のためのいくつかのDBとないために働くかもしれません。また、私はこれを試す時間がなかったので、私はその状態でいくつかの引用符がないかもしれません。私はそれが'#{v}'になると思う。

EDIT:

文字列がKまたはVは、いくつかのユーザー入力の一部である場合は、このアプローチは、SQLインジェクションの影響を受けやすい:Railsの程度もう少し学んだ後、私はここに免責事項を追加する必要があります。この方法は注意して使用してください。

+0

ありがとう!それは完璧ではありませんが、それは動作します!私はsqliteの#{v}をそれぞれ '1'に変更しました(まだmysqlをテストしていません) – kampfsau1808

+0

これらの条件が真であるかどうかを常に確認しているのであれば、ハッシュそして、あなたが値ではなくハッシュのキーだけを使用しているので、 '| k |'に '| k、v |'を代入することができます。この場合も同様に動作します。あなたができるとき私の答えを受け入れてください。 – Ashitaka

関連する問題