【Rails 7】コメント機能の「削除エラー」と「名無し」問題を一気に解決!【もみあげ稲荷】

プログラミング技術ブログ

こんにちは、もみあげ稲荷です。
本日は Ruby on Rails でコメント機能を実装していたら、思わぬ壁にぶち当たりました。

  • 削除ボタンを押すと、なぜかGETリクエストが飛んでルーティングエラー
  • コメント投稿者名が「名無し」表示になってしまう!

結論から言うと、どちらもサクッと解決できたので、その手順をまとめておきます。
同じようにお困りの方の参考になれば幸いです。

1. 削除ボタンがルーティングエラーを吐く問題

1-1. 症状

  • link_to "削除", route_comment_path(@route, comment), method: :delete と書いているのに、なぜかGETになってしまう。
  • ブラウザのコンソールを見ると .js を探して 404 を返す始末…。
  • 結果、No route matches [GET] "/routes/14/comments/2" みたいなエラーが出てくる。

1-2. 原因

  • Rails 7 からは、method: :delete を裏側で処理する仕組みが Rails UJS ではなく Turbo に変わっています。
  • 何らかの設定やJSの読み込みがうまくいかないと、リンクがただのGETリクエストとして扱われてしまう。
  • また、Ajaxで.jsレスポンスを探しに行く設定が有効になっていると、destroy.js.erb が存在しないため404になるケースも。

1-3. 解決策:button_to でフォーム送信

  • button_to は内部でフォームを生成し、確実に DELETE メソッドで送信してくれます。
  • ページ遷移するだけでOKなら、Ajax対応の .js.erb を用意する必要はありません。
  • ]私の環境(Rails 7 + importmap + Devise)では、この方法で一発解消しました。

もみあげポイント

  • Turboを無効化する方法(data: { turbo: false })もありますが、button_to の方がシンプル。
  • Ajax削除をしたい場合は、.js に対応したレスポンスを返す設定(respond_to do |format| format.js end)が必要。

2. 「名無し」問題:ユーザー名が表示されない

2-1. 症状

  • コメント一覧で <%= comment.user&.name || "名無し" %> と書いているのに、常に「名無し」 が表示される。
  • DBを見たら、Userテーブルに name カラムはあるが、中身がnil になっている。

2-2. 原因

  • Deviseでユーザー登録するときに name が渡されていない
  • デフォルトのDeviseは emailpassword などしかパラメータを受け取らないため、追加カラムを受け取る設定をしないと name は空っぽのまま。

2-3. 解決策:Deviseに name カラムを教える

  1. Deviseのビューを生成
  • app/views/devise/registrations/new.html.erb や edit.html.erb が作られます。

2. ユーザー登録フォームに name フィールドを追加

  • 既存のユーザーが編集する場合は edit.html.erb にも同様のフィールドを追加。

3. ストロングパラメータの許可

  • これを忘れると、name は受け取れず、登録しても nil のまま。

4. 既存ユーザーの name は手動で更新

  • 既に登録済みのユーザーは name が空なので、アカウント編集ページ/users/edit)やRailsコンソールで更新する必要あり。

もみあげポイント

  • Deviseを導入して追加カラムを扱うときは、ビュー生成 & パラメータ許可 が基本中の基本。
    メールアドレス表示でも良ければ、 <%= comment.user&.email %> を使う方法もある。

3. まとめ:2大トラブルを同時撃破!

  • コメント削除ボタンがルーティングエラー → button_to で DELETE を確実に送信
  • ユーザー名が表示されず「名無し」連発 → Deviseに name カラムを教えて、フォームで入力

この2つをクリアしたことで、コメント機能がスムーズに動くようになりました。
また、ユーザーが自分のプロフィールを編集して名前を設定できるようになったので、見た目や使い勝手もグッと向上!

今後の展望

  • 職務経歴書 も並行してブラッシュアップ中。転職活動に向けて、一歩ずつ前進中です。
  • コメント機能に「いいね」や「フィードバック」を追加する予定。
  • 「もみあげ稲荷」では、これからもRails学習の失敗談&成功体験をどんどん発信します!

4. おまけ:エラーに直面したら…

  • ブラウザのネットワークタブでリクエストのメソッドやパスをチェック
  • Railsのサーバーログで「Started GET〜」なのか「Started DELETE〜」なのか確認
  • エラー文を読む → 「.js ファイルが見つからない」「Devise parameter is unpermitted」などヒントが隠れている
  • 慌てずググる or ドキュメントを見る → RailsやDeviseの公式ガイドは頼れる味方
  • チャットGPTに聞いてみるのもあり!検索より早いかも!!
エラーは仲間
  • エラーが出るってことは、何かを学ぶチャンス。
  • 落ち着いてログを読めば解決の糸口が見えてくる…はず!

終わりに

今回は Rails コメント機能 で起きがちな2大トラブル(削除エラー&名無し問題)を一気に解決しました。
Rails 7 + Turbo の挙動や Devise のカスタマイズなど、ちょっとした知識があるだけで、スムーズに乗り越えられます。

これからも「もみあげ稲荷」では、躓いたポイントを包み隠さずお届けしていきますので、同じところで詰まっている方の助けになれば幸いです。
それではまた次回!もみあげ稲荷でした。

コメント

タイトルとURLをコピーしました