命名范围SQL语法错误

时间:2011-04-23 05:52:56

标签: ruby-on-rails ruby ruby-on-rails-3 named-scope named

看起来我的报价有问题吗?

我的命名范围:

named_scope :find_by_name, lambda {|name| {:conditions => ["first_name LIKE '%?%' or last_name LIKE '%?%'",  name.split(' ').first, name.split(' ').last]}}

以下是我正在进行搜索的方式:

find_by_name("#{search}")

这是生成的SQL和错误:

ActionView::Template::Error (Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'foo'%' or last_name LIKE '%'foo'%')' at line 1: SELECT COUNT(*) FROM `users` WHERE (first_name LIKE '%'foo'%' or last_name LIKE '%'foo'%')):

1 个答案:

答案 0 :(得分:2)

您可以尝试在SQL语法中删除'%?%',而是使用它:

named_scope :find_by_name, lambda {|name| {:conditions => ["first_name LIKE ? or last_name LIKE ?",  '%' + name.split(' ').first + '%', '%' + name.split(' ').last + '%']}}

如果有效,请告诉我。
附:另外定义find_by_ 某些范围并不是一个好主意,Rails alredy为你做了,ActiveRecord动态地定义了这样的方法。