2016-08-02 29 views
0

我有一個名爲name的字符串列的CSV,它有「3個月面食」之類的東西。在postgres中Ruby/Rails字符串大小寫比較問題

我想將其映射到現有的數據庫表。數據庫記錄保存爲「3個月面食」。

如果我嘗試Food.where(name: row['name'])它會出現空。因爲它正在對「3個月面食」和「3個月面食」之間的字符串進行直接串比較。

我已經嘗試了這個問題,以及

Food.where('name LIKE ?', '%' + "3 months pasta" + '%') 

,沒有工作,除非我大寫「P」,我能做些什麼,以獲得字符串匹配的兩端?我想要做一個row['name'].parameterize.underscore來獲得它到一個單一的風格,然後從數據庫中做同樣的事情,並匹配它們。問題是這樣做可能會花費昂貴的方式轉換所有名稱,然後進行比較。

有什麼我可以做到這一點?

回答

2

嘗試

Food.where("lower(name) = ?", row['name'].downcase) 
1

雖然@Ursus的回答是完全正確的,我會與本地不區分大小寫違背DB:

Food.where('name = ? COLLATE utf8_general_ci', "3 months pasta") 

ci在排序規則名稱的意思是「不區分大小寫。 「