2016-12-02 50 views
0

我試圖創建一個範圍以不區分大小寫的方式搜索模型。Rails範圍小寫搜索

scope :services_offered, -> (service) { joins(:my_services).where(my_services: {services: service.downcase }) } 

我可以downcase傳遞到範圍內的說法,但我卡在如何現在忽略模型實例。

也樂於提供更好的方法來做到這一點。

回答

1

便攜的方法是通過位的SQL來downcase數據庫裏面列:

scope :services_offered, -> (service) { joins(:my_services).where('lower(my_services.services) = ?', service.downcase) } 

或:

scope :services_offered, -> (service) { joins(:my_services).where('lower(my_services.services) = lower(?)', service) } 
+0

這就是做到了!這會被認爲是這樣做的最佳方式嗎? – Stoob

+1

我可能會傾向於第二個。 'String#downcase'只知道ASCII(直到Ruby3 AFAIK),所以如果Ruby和你的數據庫沒有使用完全相同的下行算法,你可能會遇到奇怪的問題。不太可能,但... –