在用户模型上定义范围

时间:2012-05-10 10:29:46

标签: ruby-on-rails scope case-insensitive sql-like

当搜索" john doe"时,我想返回名称如下的用户:

" john doe"," John Doe"," John Doe Jr。"," Mr。 John doe" ......(如果可能的话,#34; John Sr. Doe")

到目前为止,我所做的是在我的用户模型上将命名范围定义为:

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"则返回。我需要做什么?

我正在使用MySQL和Rails 3.2.3。

请帮助!!

2 个答案:

答案 0 :(得分:3)

尝试使用

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

答案 1 :(得分:3)

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