我有以下代码:
Test.all.where("comment like '%test%'")
如何写这个以包含Test.comment is like '%test%'
的所有模型,但忽略test
的情况。 <{1}},Test
和Testing
都应该被退回。
答案 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%'")
获取所有匹配的不区分大小写的测试结果,这就是你想要的。