Rails where 后面参数的疑惑

hexawing · 2013年04月25日 · 最后由 hexawing 回复于 2013年04月26日 · 2575 次阅读

一般都是这么写吧:

class User < ActiveRecord::Base
    scope :at_job, where("state = ?", "at_job")
end

但我用的 RubyMine 非提示我说 where 多带了一个参数。鉴于这 IDE 一贯表现良好,所以我总想,是不是我真的写的不规范?直接不写问号而把后面那个值写前面表达式里?应该没这么变态吧……

where(["state = ?", "at_job"])

or

where(state: "at_job")

or

where("state = at_job")

如果你用?只是为了传递一个写死的字符串 那你直接用字符串代替?就行了。

问号传值组装 SQL 是为了防止 SQL 注入的。

#2 楼 @raven 我知道了,谢谢

#1 楼 @ashchan 我用你的第一种写法,IDE 说,这里应该是 Hash/String/Symbol,第二种倒是不提示了,但原理是?它把这个写法认成了去掉大括号的 Hash?第三种不用说了,肯定是对的,但就像 LS 所说的防 SQL 注入

需要 登录 后方可回复, 如果你还没有账号请 注册新账号