Ruby on Rails find_by 不区分大小写

Dra*_*ack 14 sql activerecord ruby-on-rails case-insensitive

我需要从 2 个参数中找到一条记录,但我需要其中一个不区分大小写。当前区分大小写的行是

  c = Course.find_by(subject_area: area, cat_number: cat)
Run Code Online (Sandbox Code Playgroud)

但我需要 subject_area 不区分大小写。我将如何实现这一目标?

Tar*_*ast 10

这取决于数据库,您可能需要为此传入特定于数据库的 SQL(而不是使用 find_by)。你在使用 postrges 吗?如果是这样,这通常会起作用:

Course.where("LOWER(subject_area) = ? AND cat_number = ?", area.downcase, cat)
Run Code Online (Sandbox Code Playgroud)

或者,您可以在subject_area每次保存新文件时将其转换为小写...然后只需使用:

Course.find_by(subject_area: area.downcase, cat_number: cat)
Run Code Online (Sandbox Code Playgroud)

我可能是错的,但目前不知道任何 rails-native 的方式来做不区分大小写的 rails find_by


小智 6

另一种选择是

c = Course.find_by("LOWER(subject_area)= ? AND cat_number = ?", area.downcase, cat)
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您使用的是 postgres,您可以执行以下操作:

> c = Course.find_by('subject_area ILIKE ? AND cat_number LIKE ?', area, cat)
Run Code Online (Sandbox Code Playgroud)

(ILIKE 用于做不敏感的搜索)