【发布时间】:2014-01-02 20:17:52
【问题描述】:
我有这个方法,效果很好:
def find
return User.where(:name=> params[:search])
end
我的问题是它区分大小写,所以如果我搜索"bob",它不会返回任何名称大写的用户(例如"Bob")。有没有办法让它不区分大小写?
【问题讨论】:
标签: ruby-on-rails ruby
我有这个方法,效果很好:
def find
return User.where(:name=> params[:search])
end
我的问题是它区分大小写,所以如果我搜索"bob",它不会返回任何名称大写的用户(例如"Bob")。有没有办法让它不区分大小写?
【问题讨论】:
标签: ruby-on-rails ruby
你也可以使用
User.where('name ILIKE ?', params[:search])
【讨论】:
应该这样做:
def find
User.where("lower(name) = ?", params[:search].downcase)
end
通过使 db 条目小写和搜索参数小写,那么不区分大小写不再是问题。
此外,Ruby 中不需要 return 语句,因为我们有隐式返回语句。
您可以将原始 SQL 传递给 .where 命令。 lower() 是 SQL 中的函数,而不是 Ruby,它将单个字符串参数作为小写字符串返回。它相当于 Ruby 中的 .downcase。现在原始字符串和要比较的字符串都是小写的,大小写不再重要。
【讨论】:
类似这样的:
def find
return User.where(:name=> params[:search].downcase)
end
【讨论】:
User.where(:name.downcase => params[:search].downcase)