環境
Ruby: 2.6.5
Ruby on Rails: 5.2.4.2
heroku: 7.60.2
PostgreSQL: 14.1
開発環境
Cloud9
SQLite3: 3.7.17
問題
Cloud9で開発後、herokuにデプロイし、ECサイトの商品検索機能を使ったところ、次の画面に遷移しました。
We're sorry, but something went wrong.
If you are the application owner check the logs for more information.
開発環境では動いていたのに、、、
原因
heroku logs -t
コマンドでログを見ると、以下のエラーとヒントが吐かれていました。
ERROR: operator does not exist: bigint ~~ unknown
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
型のキャストをする必要があるようです。
調べてみると、PostgreSQL8.3から、自動キャストがなくなったということです。
参考:PostgreSQL: Documentation
今回はLIKE関数を使っている部分にint型のカラムがあり、text型にキャストできなくてエラーになったようです。
解決
ドキュメントに書いてある通り、CAST ( expression AS type )
という書き方をし、無事解決することができました。
- scope :search_carts_by_ids, -> (ids) { where("id LIKE ?", "%#{ids}%") }
+ scope :search_carts_by_ids, -> (ids) { where("cast(id as text) LIKE ?", "%#{ids}%") }