我怎样才能使这个查询不是 CaSe SeNsITIVe?

how can I make this query not CaSeSeNsITIVe?

如何让这个查询不区分大小写?

  @courses = Course.where('name LIKE ?', "%#{params[:name]}%")

一个典型的解决方案是在比较它们之前将两个值都变成小写:

@courses = Course.where('LOWER(name) LIKE LOWER(?)', "%#{params[:name]}%")

根据您的 RDMBS,LOWER() 可能不可用。

另外,根据您的 RDBMS,可能会有更有效的选项可用(因为使用字符串函数基本上会破坏现有索引)。例如在 MySQL 中,您在相关列上设置了不区分大小写的排序规则,这将使所有字符串比较默认不区分大小写,同时允许使用索引。

当您使用 Postgres 数据库时,您可能需要考虑 ILIKE,这是 LIKE:

的不区分大小写的版本
@courses = Course.where('name ILIKE ?', "%#{params[:name]}%")