Sql 如何在ActiveRecord.find的:条件参数中使用%?
我正在尝试这样的查询:Sql 如何在ActiveRecord.find的:条件参数中使用%?,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,我正在尝试这样的查询: Widget.find(:all, :conditions => ["name like %awesome%"]) 但是,我从sanitize_sql中得到一个“格式错误的字符串”异常,将“%”指定为问题 如何执行此查询?试试看 Widget.find(:all, :conditions => ["name like '%awesome%'"]) 刚刚在字符串周围添加了单引号%awesome% 编辑:好的,不需要;实际上不起作用。sql消毒器正在对%s执行
Widget.find(:all, :conditions => ["name like %awesome%"])
但是,我从sanitize_sql中得到一个“格式错误的字符串”异常,将“%”指定为问题
如何执行此查询?试试看
Widget.find(:all, :conditions => ["name like '%awesome%'"])
刚刚在字符串周围添加了单引号%awesome%
编辑:好的,不需要;实际上不起作用。sql消毒器正在对%s执行一些错误操作
这会奏效的
Widget.find(:all, :conditions => ["name like ?","%awesome%"])
根据John Topley的回答,如果您真正需要的话,可以将字符串设置为变量
当遇到SQL错误时,我发现一个有用的技巧是检查development.log
——它将列出实际针对数据库运行的所有查询。假设您具备SQL的基本知识,那么直接在控制台中调试它们通常是有用的,而不是在ActiveRecord级别进行尝试(尽管我认为在您的情况下,代码在到达该阶段之前就已经开始呕吐了)尝试以下语法:
term = "awesome"
Widget.all(:conditions => ["name LIKE ?", "%#{term}%"])
您的解决方案不起作用,因为您在%awesome%左右没有报价 添加单引号似乎没有帮助:-(@jcs-日志中报告的SQL语句是什么?谢谢,这非常有效。如果您碰巧解释了我尝试的版本无法正常工作的原因,我们将不胜感激。Rails不会解析条件(即百分比符号)中的SQL。您必须将参数传递到条件中。当您使用John建议的上述语法,Rails可以通过转义字符来清理输入,这样用户就不能进行SQL注入攻击。在此过程中,它使用引号将输入括起来。这是您应该使用的方法,以避免潜在问题:-)