Rails .where()子句中不区分大小写的匹配

时间:2014-01-21 16:17:10

标签: ruby-on-rails ruby

我有以下代码:

Test.all.where("comment like '%test%'")

如何写这个以包含Test.comment is like '%test%'的所有模型,但忽略test的情况。 <{1}},TestTesting都应该被退回。

2 个答案:

答案 0 :(得分:6)

如果您不关心更改数据库(顺便说一下它应该是有效的sql),您可以这样做:

Comment.where("LOWER(comments.comment) LIKE LOWER('%test%')")

如果你关心数据库的可移植性,我建议你这个(仅限arel):

comments = Comment.arel_table
Comment.where(comments[:comment].matches("%test%"))

考虑到第二个会忽略版本XXX的情况,但我不记得哪个版本。如果您使用的是Rails 3.2.x或Rails 4,那么就可以了(在两者中都进行了测试)。

SQL输出示例
使用以前的arel代码,PostgreSQL中的输出如下:

SELECT comments.* FROM comments WHERE (comments.comment ILIKE '%test%')

答案 1 :(得分:1)

Test.all.where("comment ilike '%test%'")

获取所有匹配的不区分大小写的测试结果,这就是你想要的。