#内容
Ruby on Railsのアプリをherokuにデプロイした際に、絞り込み検索でエラーが出てしまったので解決策を備忘録として残していく。
#やりたいこと
heroku上で、date型を使用して要素の絞り込み検索をしたい。
2019-08-12 | 検索 |
---|
date | name | expense |
---|---|---|
2019-08-12 | food | ¥890 |
2019-08-12 | CD | ¥1500 |
2019-08-12 | laptop | ¥190000 |
####問題のコード
@expenses = current_user.expenses
@results = @expense.where('date LIKE ?', "%#{params[:date]}%")
費用の全データを取ってきて、date型で検索文字と当てはまったものを@resultsに入れている。
#エラー
上記のコードでheorkuにデプロイしたら下記のエラーが出現。
No operator matches the given name and argument types. You might need to add explicit type casts.
ActionView::Template::Error (PG::UndefinedFunction: ERROR: operator does not exist: date ~~ unknown
簡単に翻訳すると、与えられた名前と型がオペレーターに合ったものがない。ちゃんとした型が必要。
エラー: date ~~ unknown ていうのはない。
とのこと。
どうやらdate型では正しくないから、date型を文字列に直す必要があるらしい。
#試したこと
@results = @expense.where('date::text LIKE ?', "%#{params[:date]}%")
::textをdateにつけることでdate型が文字列になっている(と思われる。)
#MySQLの場合
MySQLの場合は、::textは必要なく普通に動いた。
#まとめ
詳しくは理解できていないが、PostgreSQLのバージョンによってはdate型などは自動で判断されていたらしい。
しかし、現在のバージョンでは変更する必要があるとのこと。