今日は新しい機能を実装している際にルーティングを追加し、エラーが出てしまったのでそのエラー解決方法について備忘録として載せたいと思います!
他にもいくつかエラーが出てしまったので、その対処法も書いてみます!
以下紹介するエラー内容です。
エラー1: パスを指定したが遷移時に異なるアクションが読み込まれるエラー
エラー2: ActionTextが正常に表示されない(エラー文は出ていない)
エラー3: app/javascript/packs/application.jsが読み込まれない(コンソール上のエラー)
エラー1: パスを指定したが遷移時に異なるアクションが読み込まれるエラー
今回はパス自体の記述はあっているのに、遷移した際に違うアクションのページが読み込まれている場合です。ズバリ!ルーティングに問題がありました...というのも、そもそもなぜそのようになってしまっているのかまず説明しますね。
ルーティングをする際にroutes.rbを書きますよね。Railsはパスを読み込むと記述したルーティング順にどのアクションをすればいいか探していきます。その際に、URLが
user/:id(users#show)
user/check(users#check)
という順番になるようにルーティングを指定されていた場合(実際のルーティングの書き方をしていないのでかえって分かりづらかったらすみません。rails routesをしたときの表示に寄せています。)、user/:idはうまく読み込まれますが、user/checkは読み込まれません。この場合、パスを指定しているとid="check"と読み込まれて、users#showが読み込まれてしまいます。この問題の解決方法は
ルーティングの記述順を入れ替える
です。今回の場合だと
user/check(users#check)
user/:id(users#show)
このような順番で読み込まれるようにルーティングを書き換えれば問題解決します!
実際のルーティングはこのようになります。
'user/check' => 'users#check'
'user/show' => 'users#show'
ちなみにルーティングの順番を入れ変えるほかに、idを数字しか読み込めなくするという解決方法もあるそうです。
エラー2: ActionTextが正常に表示されない(エラー文は出ていない)
今回はエラーではありませんが、ActionTextをせっかく導入したのに、うまく読み込まれず形が崩れていました。
本来であればこのように表示されるはずです。
しかし、解決前はBやIなどの部分がBold, Italicなどと表示され、入力フォームも中途半端に表示されていました。(写真無くてすみません)
解決方法としては、
app/views/layouts/application.html.erbのhead内にstylesheet_link_tagを追記する
でした。当時、stylesheet_pack_tagはあったものの、stylesheet_link_tagは消している状態でした。もし同じ状況の方がいらっしゃったらこちらを追記してください。
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
エラー3: app/javascript/packs/application.jsが読み込まれない(コンソール上のエラー)
webpackerを使用している際に、読み込む場所を正しく設定できていなかったようです。いろいろ記事を読んでみましたが、ビルドできていない状態で、jsファイルに変更があっても読み込まれていない状態でした。
解決方法は、
ターミナルでbin/webpackというコマンドを実行する
でした!これでファイルに変更があった際にも自動で読み込んで、コンパイルしてくれるそうです!以下の記事を参考にさせていただきました。
これでも解決しない場合は、ファイルの場所や階層、読み込むための記述が間違っている可能性があるので、そのあたりを試してみてください。
最後に
最近PF作成で新しいことに挑戦する代わりに様々なエラーと出会う機会が増えました。頻繁に出会えるものではないので、出会ってから忘れないように書き留めておきたいなと思います。解決できる選択肢もいくつかあったりするので、いろんな方法をいつかパッと思い浮かぶようになりたいなぁと、メンターさんに質問していて感じました。
様々なエラーを日々解決している現役エンジニアの皆さんには本当に頭が上がりません...いつかそうなれますように!ちょっとした日記でした。
今日もお疲れ様でした!!