在下面,我希望第一个?
按字面意思使用,只有第二个?
应该用作绑定变量标记:
Foo.find_by_sql ["select IFNULL(col,'?') from foos where id = ?",1]
此错误:
错误的绑定变量数(1为2)
我如何逃脱第一个?
以便按字面意思对待它?
答案 0 :(得分:4)
ActiveRecord不够智能,无法忽略字符串文字中的占位符,因此它认为?
中的'?'
是占位符而不是字符串的一部分。最简单的方法是使用命名占位符:
Foo.find_by_sql ["select IFNULL(col, '?') from foos where id = :id", :id => 1]
当ActiveRecord在数组的第二个元素中看到Hash时,它将查找命名占位符(使用Ruby符号表示法)而不是位置?
占位符。我倾向于倾向于命名占位符期间,因为它们更具可读性和更强大。