2014-01-21 47 views
2

我有以下代碼:不區分大小寫匹配。凡()子句

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

我怎麼能寫這包括所有車型,其中Test.comment is like '%test%',但忽略test的情況。 TestTestingTEST都應該返回。

回答

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%') 
0
Test.all.where("comment ilike '%test%'") 

獲取測試,這是你想要的所有匹配不區分大小寫的結果。

相關問題