我的開發數據庫是SQLite,但是我將應用程序部署到Heroku,他們使用的是PostgreSQL。使用Rails進行Postgres不區分大小寫的搜索
現在,如果我執行搜索,有時會出現兩個不同的結果,因爲PostgreSQL區分大小寫,但SQLite不區分大小寫。
不應該Rails標準化這些東西?我應該用什麼方法來解決這個問題?
Here is how to fix it with raw SQL
我的開發數據庫是SQLite,但是我將應用程序部署到Heroku,他們使用的是PostgreSQL。使用Rails進行Postgres不區分大小寫的搜索
現在,如果我執行搜索,有時會出現兩個不同的結果,因爲PostgreSQL區分大小寫,但SQLite不區分大小寫。
不應該Rails標準化這些東西?我應該用什麼方法來解決這個問題?
Here is how to fix it with raw SQL
另DDL
處理方法是citext
數據類型或不區分大小寫的TEXT。
ActiveRecord無法處理很多相對常見的事情,而LIKE匹配就是其中之一。這裏是如何使用直線Arel來實現這一點。
Model.where(
Model.arel_table[:title].matches("%#{search_term}%")
)
您可以安裝Arel-Helpers使這一點更容易
Model.where(Model[:title].matches("%#{search_term}%"))
我以前推薦Squeel這一點,但原創者已經停止支持它,似乎沒有成爲一個全實時開發者維護它。而且由於它使用私有的ActiveRecord API,它需要不斷的管理。
偉大的解決方案,Squeel很棒,但只是提醒說這是Postgres特定的行爲。如果您希望爲其他RDBMS執行此操作,則輸出可能區分大小寫。 – kgx
@kgx實際上這個例子在兩種情況下都能按預期工作。正如@antpaw上面所說的,默認情況下,SQLite'LIKE'不區分大小寫。所以這將在SQLite中使用LIKE,在PostgreSQL中使用ILIKE。 –
如果你正在部署到Heroku,我建議在PostgreSQL之上開發。沒有ORM會保護你免受特定於數據庫的行爲。 –
而且我喜歡在本地運行SQLite和運送Postgre,所以我沒有綁定到某個數據庫。給他自己。 –