タイトルがヘンテコだったらすみません。初心者です。
Railsで練習用アプリを試作し、その練習用アプリをherokuにデプロイしました。
heroku logsで以下のようなエラーが出ました。
ActionView::Template::Error (PG::UndefinedFunction: ERROR: operator does not exist: integer ~~ unknown
LINE 1: SELECT COUNT(*) FROM "books" WHERE (genre1 LIKE '%1%') AND...
Bookモデルのgenre1カラムに「1」というデータが入っているものだけを絞り込むコードでのエラーです。
ローカル環境(sqlite3)では問題なく動きますが、herokuにデプロイ後のPostgreSQLでエラーを吐きます。
調べてみると、「'%1%'」のような表記は文字列型(text)用のものらしく、PostgreSQL8.3以前のバージョンなら対象のカラムを自動でtext型に変換して検索してくれたが8.3以降のバージョンではこれがなくなり、ちゃんと指定しないとエラーを吐くようになってしまったそうです。
参考:PostgreSQLデータベースの自動キャストがなくなった・・・。
解決策として、以下のようにカラム名の直後に「::text」としてやればtext型に変換してくれるようなのですが、
LINE 1: SELECT COUNT(*) FROM "books" WHERE (genre1::text LIKE '%1%') AND...
このようにするためには、どこにどのように「::text」を書けばよいのでしょうか??
参考までに以下Railsのhtmlとcontrollerのコードです。
controller
1def genre 2 @books = Book.page(params[:page]).per(100).where('genre1 LIKE ?', "%#{params[:genre1]}%").where('genre2 LIKE ?', "%#{params[:genre2]}%")... 3 :
html
1<td> 2 <div> 3 1 4 <%= form_tag(genre_books_path, method: "get") do %> 5 <%= text_field_tag :genre, "1" %> 6 <%= submit_tag "" %> 7 <% end %> 8 </div> 9</td>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/06 08:25 編集
2019/02/06 08:33
2019/02/06 08:43