2016-11-14 26 views

回答

4

ActiveRecord不夠聰明,忽略字符串文字中的佔位符,因此它認爲'?'中的?是佔位符而不是字符串的一部分。解決這個問題的最簡單的方法是使用指定的佔位符:

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

當ActiveRecord的看到了它會尋找指定的佔位符(使用Ruby的符號表示),而不是位置?佔位符數組的第二個元素的哈希值。我傾向於傾向於命名的佔位符時期,因爲它們更具可讀性和更強大。