Rails6で開発しているアプリで以下のコードで検索機能を作成しています。
Challenge.where(['title LIKE ? OR subtitle LIKE ? OR action_text_rich_texts.body LIKE ? OR challenge_tags.tag LIKE ?', "%#{keyword}%", "%#{keyword}%","%#{keyword}%","%#{keyword}%"]) .order(updated_at: "DESC") .joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = Challenges.id AND action_text_rich_texts.record_type = 'Challenge'") .joins(challenge_taggings: :challenge_tag) .distinct
このコードにて発行されるSQL文は以下のようになります。
SELECT DISTINCT challenges
.* FROM challenges
INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = Challenges.id AND action_text_rich_texts.record_type = 'Challenge' INNER JOIN challenge_taggings
ON challenge_taggings
.challenge_id
= challenges
.id
INNER JOIN challenge_tags
ON challenge_tags
.id
= challenge_taggings
.challenge_tag_id
WHERE (title LIKE '%wine%' OR subtitle LIKE '%検索キーワード%' OR action_text_rich_texts.body LIKE '%検索キーワード%' OR challenge_tags.tag LIKE '%検索キーワード%') ORDER BY challenges
.created_at
DESC, challenges
.updated_at
DESC LIMIT 12 OFFSET 0
発生している問題
この検索機能について、ローカル環境では意図した通りの検索が実行されるのですが、AWS上の本番環境では以下のエラーが発生して動きません。
Error (Mysql2::Error: Unknown column 'Challenges.id' in 'on clause'):
本番環境のdbにおいてもテーブル'Challenges'にカラム'id'が存在することを確認しています(ローカル環境のdb・テーブルと同じ)
質問・相談したいこと
①ローカル環境では動作するのに本番環境では動かない理由については、WEBで検索した結果、
「mysqlで、dbのバージョン違いによってSQLの構文がOKとなるかエラーとなる異なるケースがある」
という理由と推測しましたが、正直よくわかりません・・・
原因についてわかる方いましたら教えていただけないでしょうか?
dbのバージョンについては確かに本番・ローカル環境で違いまして以下です。
ローカル:Ver 8.0.23 for osx10.14 on x86_64 (Homebrew)
本番:5.5.68-MariaDB, for Linux (x86_64)
②原因次第ですが、対処方法についてアドバイスお願いします。
上記の推測の原因が正解の場合、「Railsのコード>SQLを修正する」または「dbのバージョンを合わせる」ということになるのではないかと思いますが、特に前者の場合はどのように修正すれば良いのかわからず困っている次第です。
お力お貸しください。
回答1件
あなたの回答
tips
プレビュー