コメント削除時のリダイレクト先を修正し、自己参照ページでの404を回避

activeadmin/activeadmin

コメントを削除した直後に表示されるページが、削除対象そのもの(/admin/comments/:id)になるため 404 エラーが発生していました。この PR はそのケースでは コメント一覧ページ へ遷移させ、コメント可能リソースからの削除時は従来通り redirect_back を維持することで、ユーザー体験を改善します。

背景

コメント削除 後のリダイレクト先が常に redirect_back で決定されていたため、自己参照ページ(/admin/comments/:id)から削除すると、削除済みの URL へ戻り 404 が返っていました。Issue #7770 で報告されたこの挙動は、コメント可能リソース(例: /admin/posts/5)から削除した場合には問題がなく、ページ遷移が期待通りに機能していました。したがって、削除元がコメント自身かどうかを判定してリダイレクト先を切り替える必要がありました。

技術的な変更

ビュー app/views/active_admin/shared/_resource_comments.html.erb の削除リンクに return_to パラメータを付加し、自己参照ページからの削除要求を識別できるようにしました。

<%= link_to I18n.t("active_admin.comments.delete"), url_for_comments(comment.id, return_to: "back"), method: :delete, data: { confirm: I18n.t("active_admin.comments.delete_confirmation") } %>

コントローラ lib/active_admin/orm/active_record/comments.rbdestroy アクションは、params[:return_to] が "back" の場合は redirect_back を、そうでない場合は redirect_to action: :index へと分岐させました。

if params[:return_to] == "back"
  redirect_back fallback_location: active_admin_root
else
  redirect_to action: :index
end

テストも三点追加しました。Cucumber シナリオでは、自己参照ページから削除した際にコメント一覧ページへ遷移することを検証し、別シナリオでコメント可能リソースのページに戻ることを確認しています。RSpec ユニットテストは、delete リクエストの期待リダイレクト先をそれぞれ admin_comments_url とリファラに合わせてチェックしています。

設計判断

return_to パラメータ を用いて削除コンテキストを明示的に伝える方針は、既存の redirect_back ロジックを崩さずに機能追加できる点が評価されました。自己参照削除のみを特例扱いすることで、コメント可能リソースからの削除フローは変更不要となり、後方互換性が保たれます。パラメータチェックはシンプルな文字列比較で実装でき、コントローラ側のロジック増加は最小限に抑えられました。

まとめ

本変更は、コメント削除後のリダイレクト先をコンテキストに応じて切り替えることで、自己参照ページからの削除で発生していた 404 を解消しました。return_to パラメータによる分岐は、既存動作への影響を最小化しつつ、ユーザーが期待する遷移先を提供する設計判断と言えます。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
048de3dd

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文、背景、技術的変更、設計判断(任意)、まとめの5要素が揃っており、総論→各論→結論の流れが明確です。

カスタムMarkdown構文 ⚠ WARNING

シンタックスハイライト・GitHubリンク記法の正確性

コードブロックは正しい `言語:ファイルパス` 形式ですが、Issue #7770 のリンクがプレーンテキストで、GitHubリンク記法([#7770](URL))になっていません。PR のリンクは形式的に合致していますが、完全な統一が必要です。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

エンジニア向けの専門的な記述で、初心者向けの過度な説明はありません。対象読者に適しています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論→各論→結論の構成を保ち、段落はトピックセンテンスで始まり、1段落1トピック、長さも適切です。空行で区切られています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事中のコードブロックは Diff に記載された変更と一致しています。抜粋は正確で、ファイル名も Diff と合致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`return_to` パラメータ、`redirect_back`、`redirect_to` などの用語は PR 内容と一致し、誤用はありません。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

技術的な主張(自己参照ページでの 404 回避、コメント一覧へリダイレクト)すべてが PR の説明と Diff から裏付けられています。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事の主張はすべて PR タイトル・説明・Diff に基づいており、根拠のない推測や外部知識は含まれていません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR 番号 (#9031) と Issue 番号 (#7770) が正確に記載されています。その他の数値・固有名詞はありません。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトルは PR タイトルの意味合い(自己参照ページからの削除時にコメント一覧へリダイレクト)を適切に日本語化しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

バージョンサポートやリリース日程等、PR に無い外部情報は一切記載されていません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

時間表現は使用されておらず、PR と矛盾する表現もありません。