Rails find_by_sql - 使用"?"字面上而不是绑定变量?

时间:2016-11-14 01:37:07

标签: ruby-on-rails activerecord rails-activerecord

在下面,我希望第一个?按字面意思使用,只有第二个?应该用作绑定变量标记:

Foo.find_by_sql ["select IFNULL(col,'?') from foos where id = ?",1]

此错误:

  

错误的绑定变量数(1为2)

我如何逃脱第一个?以便按字面意思对待它?

1 个答案:

答案 0 :(得分:4)

ActiveRecord不够智能,无法忽略字符串文字中的占位符,因此它认为?中的'?'是占位符而不是字符串的一部分。最简单的方法是使用命名占位符:

Foo.find_by_sql ["select IFNULL(col, '?') from foos where id = :id", :id => 1]

当ActiveRecord在数组的第二个元素中看到Hash时,它将查找命名占位符(使用Ruby符号表示法)而不是位置?占位符。我倾向于倾向于命名占位符期间,因为它们更具可读性和更强大。