初めての投稿です。
プログラミングスクールの卒業制作のような位置付けでオリジナルアプリを作成していて、エラーが出たので備忘録として投稿します。
読みにくい部分もあるかと思いますがご容赦ください。
開発しているアプリ
- 自分の趣味で所属している団体内(約70名が所属)で使用することを想定した連絡ツールアプリ。
- 今後はメール一斉送信機能、メンバーを指定したチャット機能、データファイル投稿機能などを実装予定。
実装環境
- MacOS Ventura13.0
- Ruby 2.6.5
- Rails 6.1.6.1
- MySQL 14.14
- TablePlus 5.1.0(本番環境のデータベースを管理)
状況
- deviseを使ってユーザー新規登録とログイン機能を実装済み。
- マイページ・ユーザー情報編集機能を実装。
- さらに、ユーザー情報より詳細な団員情報の登録・編集機能を実装。
- renderを使ってデプロイが完了。
関係するDBの構成
- ユーザー情報:usersテーブル
- 団員情報:membersテーブル
- 双方のテーブルは1対1の関係(usersテーブルが親、membersテーブルが子)
起こったこと
- デプロイ後、本番環境での動作確認を実施。
- 団員情報編集ページへのリンクをクリックしたら、"The page you were looking for doesn't exist."というエラー画面が表示された。
- ログを見てみると、"ActiveRecord::RecordNotFound(Couldn't find Member with 'id'=2)"とある。
解決方法
リンクのパスが間違っていた(下記のコードのedit_member_pathの後のidに注目)。
コード
修正前
<%= link_to '団員情報を編集', edit_member_path(@member.user_id), class:"member_info_btn" %><br>
修正前の段階で考えていたこと
membersテーブルはuser_idを外部キーとして参照しているから、リンクのパスにもuser_idを指定しないといけない!(思い込み)
試したこと・考えたこと
- 本番環境でのログをよく見てみると、"Couldn't find Member with 'id'=2"とある。
- TablePlusで登録されている情報を見ると、"id =2"は団員情報(member)に紐づいているユーザーのidを示している。
- 当時、member情報は1つしか登録されていなかったため、エラー文にて「member情報でid=2のレコードが見つかりません」と出ていた、とわかった。
- 外部キーとか考えず、単純にmemberのidをリンクのパスに含めれば良いのでは、と考え、以下のように修正。
修正後
<%= link_to '団員情報を編集', edit_member_path(@member.id), class:"member_info_btn" %><br>
これでリンク先のページに飛べました!
感想(読み飛ばしていただいて構いません)
解決に至る前からこうやって記事を書いていたら、頭の中で思考が整理されて解決に至ったので、勇気を出して記事を書いて良かったなあ、と思います。
解決後は「こんなしょうもないことで…」と思ってしまい投稿するのも恥ずかしく思えますが、解決の記録がつくことで自分の糧になりそうなので、勇気を出して投稿しました。
これから先の実装も頑張っていきたいと思います。
最後まで読んでいただきありがとうございました。