一般都是这么写吧:
class User < ActiveRecord::Base scope :at_job, where("state = ?", "at_job") end
但我用的 RubyMine 非提示我说 where 多带了一个参数。鉴于这 IDE 一贯表现良好,所以我总想,是不是我真的写的不规范?直接不写问号而把后面那个值写前面表达式里?应该没这么变态吧……
where(["state = ?", "at_job"])
or
where(state: "at_job")
where("state = at_job")
如果你用?只是为了传递一个写死的字符串 那你直接用字符串代替?就行了。
?
问号传值组装 SQL 是为了防止 SQL 注入的。
#2 楼 @raven 我知道了,谢谢
#1 楼 @ashchan 我用你的第一种写法,IDE 说,这里应该是 Hash/String/Symbol,第二种倒是不提示了,但原理是?它把这个写法认成了去掉大括号的 Hash?第三种不用说了,肯定是对的,但就像 LS 所说的防 SQL 注入