1

当搜索“john doe”时,我想返回具有以下名称的用户:

“john doe”、“John Doe”、“John Doe Jr.”、“Mr. John doe”……(如果可能的话,还有“John Sr. Doe”)

到目前为止,我所做的是在我的 User 模型上定义了一个命名范围:

scope :by_name, lambda { |name| where('UPPER(name) LIKE ?', name.upcase) }

然后在我的 /users/search 中:

name = params[:name]
@users = User.by_name(name).paginate(page: params[:page], per_page: 10)

但这不起作用。我正在返回具有完全相同名称且区分大小写的用户 - 因此,如果存在名为“john doe”的用户,则“john doe”返回。我需要做什么??

我正在使用带有 Rails 3.2.3 的 MySQL。

请帮忙!!

4

2 回答 2

3

尝试使用

scope :by_name, lambda { |name| where('UPPER(name) LIKE %?%', name.upcase) }
于 2012-05-10T10:44:58.933 回答
3
scope :by_name, lambda { |name| where('UPPER(name) LIKE ?', "%#{name.upcase}%") }
于 2012-05-10T10:49:21.737 回答