2012-01-17 6 views
0

field in (a1,a2,a3)を使用すると、=演算子を使用するよりもかなり高速です。これは `field in`を使ってどのように書くのですか?

SELECT * 
FROM user 
WHERE Greeting IN ('hello', 'hi', 'hey') 

上記のクエリをレールで書くにはどうすればよいですか?

users = User.where('greeting in (?)', %w{hello hi hey}) 

Railsは、プレースホルダの値として、配列、%w{hello hi hey}で何をすべきか知っている:

答えて

3

あなたはこのような何かをしたいです。

h_words = [ 'hello', 'hi', 'hey' ] 
users = User.where('greeting in (?)', h_words) 
# or even this 
users = User.where('greeting in (:words)', :words => h_words) 

または、おそらく最もRailsy方法、このような:

users = User.where(:greeting => %w{hello hi hey}) 
+0

は 'User.where( '?(で挨拶)' ん、h_wordsそれとも、あなたはすでに文字列の配列を持っていた場合) '' h_words'の配列要素はSQLの安全な注入に必要ですか?準備された文でPHPがそうするように、レールはそれを行いますか? – user482594

+0

@ user482594:ActiveRecordは、プレースホルダの値を適切にエスケープしエンコードするので、通常の文字列の配列を渡します。文字列補間を使用した場合は、自分で行う必要がありますが、絶対に必要な場合を除き、そうしないでください。 –

関連する問題