Ruby on Rails - 如何使.where方法不区分大小写

时间:2014-01-02 11:06:24

标签: ruby-on-rails ruby

我有这种方法,效果很好:

def find
  return User.where(:name=> params[:search])
end

我的问题是它区分大小写,因此如果我搜索"bob",则不会返回名称为大写的任何用户(例如"Bob")。有没有办法让它不区分大小写?

3 个答案:

答案 0 :(得分:3)

您也可以使用

User.where('name ILIKE ?', params[:search])

答案 1 :(得分:1)

这应该这样做:

def find
  User.where("lower(name) = ?", params[:search].downcase)
end

通过将db条目设置为小写并将搜索参数设置为小写,则不区分大小写不再是问题。

此外,Ruby中不需要return语句,因为我们有隐式返回语句。

它是如何工作的?

您可以将原始SQL传递给.where命令。 lower()是SQL中的函数,而不是Ruby,它将单个字符串参数作为小写字符串返回。它是Ruby中.downcase的等价物。既然原始字符串和要比较的字符串都是小写的,则情况不再重要。

答案 2 :(得分:-1)

这样的事情:

def find
    return User.where(:name=> params[:search].downcase)
end