コメント削除時のリダイレクト先を修正し、自己参照ページでの404を回避
コメントを削除した直後に表示されるページが、削除対象そのもの(/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.rb の destroy アクションは、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 パラメータによる分岐は、既存動作への影響を最小化しつつ、ユーザーが期待する遷移先を提供する設計判断と言えます。