如何在ActiveRecord.find的:conditions参数中使用%?

时间:2009-06-04 09:45:44

标签: sql ruby-on-rails ruby activerecord

我正在尝试这样的查询:

Widget.find(:all, :conditions => ["name like %awesome%"])

但是,我从sanitize_sql收到“格式错误的格式字符串”异常,指定“%”作为问题。

如何执行此查询?

3 个答案:

答案 0 :(得分:8)

试试这个语法:

term = "awesome"
Widget.all(:conditions => ["name LIKE ?", "%#{term}%"])

答案 1 :(得分:0)

尝试

Widget.find(:all, :conditions => ["name like '%awesome%'"])

只需在字符串%awesome%

周围添加单引号

编辑:好的,实际上并没有。 sql清理程序正在使用%s做一些事情。

这样可行。

Widget.find(:all, :conditions => ["name like ?","%awesome%"])

根据John Topley的回答,如果这是你真正需要的,你可以将字符串变成一个变量。

我发现在遇到SQL错误时发现有用的一个提示是检查development.log - 它将列出实际针对数据库运行的所有查询。假设您具有SQL的基本知识,那么直接在控制台中调试它们通常很有用,而不是在ActiveRecord级别进行调试(尽管我认为在您的情况下代码在进入该阶段之前就已经开始了)

答案 2 :(得分:0)

您的解决方案不起作用,因为%awesome%附近没有引号。