AWSでコード完成、いざherokuへデプロイ!・・・したけどエラー。
調べてみると、あいまい検索の部分がおかしいらしい。
####【ページ内リンク】
0.環境
1.ソースコード
2.そもそもあいまい検索部分が原因だと分かった経緯
3.解決策
#0.環境
・AWS
・heroku/7.48.0 linux-x64 node-v12.16.2
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
・MySQL 5.7.31
・PostgreSQL 9.2.24
#1.ソースコード
@teams = Team.where("#{key} like ?", "%#{value}%")
・いたって普通のあいまい検索。key
がキー、value
が値。
【例:key = "id"
、`value = "(検索用に入力した値)"】
・MySQLだと上手くいったのに、PostgreSQLだとエラーが生じた。
※ちなみに、下記に2通り完全一致検索方法を書いたが、方法1はどちらでも作動し、方法2はPostgreSQL
では作動しなかった。
@teams = Team.where("#{key} = #{value}") #方法1
@teams = Team.where("#{key} like ?", "#{value}") #方法2
たぶん「like
」が悪そう。
#2.そもそもあいまい検索部分が原因だと分かった経緯
$ heroku logs -t
heroku logs --tail
の略。これを打てば、どこでエラーが出たか一発で分かる。
#3.解決策
調べてみると、key
とvalue
の型が違うのが原因らしい。
@teams = Team.where("cast(#{key} as text) like ?", "%#{value}%")
PostgreSQLなら、これで良い。cast
、RubyやRailsというよりSQL寄り?
でもMySQLだとこれはエラーとなった。絶対何か他にいい方法あるよなぁ。