看起来我的报价有问题吗?
我的命名范围:
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'%')):
答案 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动态地定义了这样的方法。