0

看起来我的引号有问题?

我的命名范围:

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'%')):
4

1 回答 1

2

你可以尝试在你的 SQL 语法中去掉 '%?%' ,而是使用这个:

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

请让我知道它是否有效。
PS 另外,定义 find_by_ 范围也不是一个好主意 Rails 已经为你做了,ActiveRecord 动态定义了这样的方法。

于 2011-04-23T06:01:43.433 回答