0
我知道使用field in (a1,a2,a3)
比使用=运算符要快。我怎样才能以rails方式使用`field in`来写这个?
SELECT *
FROM user
WHERE Greeting IN ('hello', 'hi', 'hey')
如何在轨道上写上述查询?
我知道使用field in (a1,a2,a3)
比使用=运算符要快。我怎样才能以rails方式使用`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}
,作为一个占位符的值。或者,如果你已经有了一个字符串数组:
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})
是否'User.where( '在问候()?',h_words )'需要'h_words'中的数组元素才能保证sql注入安全?做轨道,就好像PHP在准备好的声明中那样做了吗? – user482594 2012-01-17 04:06:40
@ user482594:ActiveRecord将负责正确地转义和编码占位符值,以便将它交给一个普通字符串数组。如果你使用了字符串插值,你必须自己做,所以除非绝对必要,否则不要这样做。 – 2012-01-17 04:11:13