{"id":1468,"date":"2025-03-24T08:50:39","date_gmt":"2025-03-23T23:50:39","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1468"},"modified":"2025-03-24T08:50:39","modified_gmt":"2025-03-23T23:50:39","slug":"rails%e5%88%9d%e5%bf%83%e8%80%85%e5%bf%85%e8%a6%8b%ef%bc%81redirect_to%e3%81%ae%e5%85%a8%e7%9f%a5%e8%ad%98%e3%81%a89%e3%81%a4%e3%81%ae%e5%ae%9f%e8%b7%b5%e3%83%86%e3%82%af%e3%83%8b%e3%83%83%e3%82%af","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1468","title":{"rendered":"Rails\u521d\u5fc3\u8005\u5fc5\u898b\uff01redirect_to\u306e\u5168\u77e5\u8b58\u30689\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af\u3010\u89e3\u8aac\u4ed8\u304d\u3011"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">redirect_to\u3068\u306f\uff1f\u57fa\u790e\u304b\u3089\u7406\u89e3\u3059\u308b\u5fc5\u9808\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">redirect_to\u30e1\u30bd\u30c3\u30c9\u306e\u57fa\u672c\u7684\u306a\u5f79\u5272\u3068\u52d5\u4f5c\u306e\u4ed5\u7d44\u307f<\/a>      <\/li>      <li>        <a href=\"#i-2\">render\u30e1\u30bd\u30c3\u30c9\u3068\u306e\u9055\u3044\u3092\u7406\u89e3\u3057\u3088\u3046<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">HTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3068redirect_to\u306e\u95a2\u4fc2\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">redirect_to\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3088\u3046<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u30b7\u30f3\u30d7\u30eb\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u542b\u3080\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u66f8\u304d\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6d3b\u7528\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u306e\u5411\u4e0a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">\u77e5\u3063\u3066\u304a\u304f\u3079\u304d9\u3064\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u6761\u4ef6\u5206\u5c90\u3092\u4f7f\u3063\u305f\u52d5\u7684\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5236\u5fa1<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u30cd\u30b9\u30c8\u5316\u3055\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u624b\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-11\">CRUD\u51e6\u7406\u5f8c\u306e\u6b63\u3057\u3044\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-12\">\u5916\u90e8URL\u3078\u306e\u5b89\u5168\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u30d0\u30c3\u30af\u30a8\u30f3\u30c9API\u3067\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/a>      <\/li>      <li>        <a href=\"#i-14\">Turbo\u3068redirect_to\u306e\u9023\u643a\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3067\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30c6\u30b9\u30c8\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-16\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u610f\u8b58\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u8a08<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u30c0\u30d6\u30eb\u30ec\u30f3\u30c0\u30fc\u30a8\u30e9\u30fc\u306e\u539f\u56e0\u3068\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-20\">\u7121\u9650\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30eb\u30fc\u30d7\u306e\u9632\u6b62\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-21\">\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u30d1\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u5bfe\u5fdc<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-22\">redirect_to\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-23\">RESTful\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u8a08\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-24\">\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u8003\u616e\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-25\">\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u306e\u4f5c\u6210<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">redirect_to\u3068\u306f\uff1f\u57fa\u790e\u304b\u3089\u7406\u89e3\u3059\u308b\u5fc5\u9808\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">redirect_to\u30e1\u30bd\u30c3\u30c9\u306e\u57fa\u672c\u7684\u306a\u5f79\u5272\u3068\u52d5\u4f5c\u306e\u4ed5\u7d44\u307f<\/h3>\n\n\n\n<p><code>redirect_to<\/code>\u306f\u3001Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u753b\u9762\u9077\u79fb\u3092\u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30d6\u30e9\u30a6\u30b6\u306b\u5bfe\u3057\u3066\u300c\u5225\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u300d\u3068\u3044\u3046\u6307\u793a\u3092\u9001\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u52d5\u4f5c\u306e\u4ed5\u7d44\u307f\u3092\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067<code>redirect_to<\/code>\u304c\u5b9f\u884c\u3055\u308c\u308b<\/li>\n\n\n\n<li>Rails\u306f\u6307\u5b9a\u3055\u308c\u305fURL\u3068\u5171\u306b300\u756a\u53f0\u306eHTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\uff08\u901a\u5e38\u306f302\uff09\u3092\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u8fd4\u3059<\/li>\n\n\n\n<li>\u30d6\u30e9\u30a6\u30b6\u306f\u65b0\u3057\u3044URL\u306b\u5bfe\u3057\u3066\u6539\u3081\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308b<\/li>\n\n\n\n<li>\u65b0\u3057\u3044\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u5b9f\u884c\u3055\u308c\u3001\u7d50\u679c\u304c\u8868\u793a\u3055\u308c\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def create\n  @post = Post.new(post_params)\n  if @post.save\n    redirect_to @post  # \u4fdd\u5b58\u6210\u529f\u6642\u306b\u8a73\u7d30\u30da\u30fc\u30b8\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n  else\n    render :new       # \u4fdd\u5b58\u5931\u6557\u6642\u306f\u30d5\u30a9\u30fc\u30e0\u518d\u8868\u793a\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">render\u30e1\u30bd\u30c3\u30c9\u3068\u306e\u9055\u3044\u3092\u7406\u89e3\u3057\u3088\u3046<\/h3>\n\n\n\n<p><code>redirect_to<\/code>\u3068<code>render<\/code>\u306f\u3001\u3069\u3061\u3089\u3082\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u304c\u3001\u305d\u306e\u52d5\u4f5c\u306f\u5927\u304d\u304f\u7570\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e3b\u306a\u9055\u3044\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-57231690-dd93-4497-8437-c8a09d30c942\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>redirect_to<\/th><th>render<\/th><\/tr><\/thead><tbody><tr><td>HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u6570<\/td><td>2\u56de\uff08\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8981\u6c42 + \u65b0\u898f\u30ea\u30af\u30a8\u30b9\u30c8\uff09<\/td><td>1\u56de<\/td><\/tr><tr><td>URL\u5909\u66f4<\/td><td>\u3042\u308a<\/td><td>\u306a\u3057<\/td><\/tr><tr><td>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570<\/td><td>\u65b0\u898f\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u518d\u8a2d\u5b9a\u304c\u5fc5\u8981<\/td><td>\u7d99\u7d9a\u3057\u3066\u4f7f\u7528\u53ef\u80fd<\/td><\/tr><tr><td>\u4f7f\u7528\u30b7\u30fc\u30f3<\/td><td>\u30fb\u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u5f8c\u306e\u753b\u9762\u9077\u79fb<br>\u30fb\u30ed\u30b0\u30a4\u30f3\u8981\u6c42<br>\u30fb\u51e6\u7406\u5b8c\u4e86\u5f8c\u306e\u9077\u79fb<\/td><td>\u30fb\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u6642<br>\u30fb\u691c\u7d22\u7d50\u679c\u8868\u793a<br>\u30fb\u90e8\u5206\u7684\u306a\u753b\u9762\u66f4\u65b0<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u88c5\u4f8b\u3067\u9055\u3044\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PostsController &lt; ApplicationController\n  def create\n    @post = Post.new(post_params)\n\n    if @post.save\n      # \u4fdd\u5b58\u6210\u529f\uff1a\u65b0\u3057\u3044\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u767a\u751f\u3055\u305b\u308b\n      redirect_to post_path(@post), notice: '\u6295\u7a3f\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f'\n    else\n      # \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\uff1a\u540c\u3058\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u3067\u63cf\u753b\n      render :new\n      # @post\u306e\u30a8\u30e9\u30fc\u60c5\u5831\u304c\u30d3\u30e5\u30fc\u3067\u4f7f\u3048\u308b\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">HTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3068redirect_to\u306e\u95a2\u4fc2\u6027<\/h3>\n\n\n\n<p><code>redirect_to<\/code>\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067302\uff08Found\uff09\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u304c\u3001\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\nredirect_to posts_path, status: :moved_permanently  # 301\nredirect_to posts_path, status: :found             # 302\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\uff09\nredirect_to posts_path, status: :see_other         # 303\nredirect_to posts_path, status: :temporary_redirect # 307<\/pre>\n\n\n\n<p>\u4e3b\u306a\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u306e\u4f7f\u3044\u5206\u3051\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>301\uff08Moved Permanently\uff09<\/li>\n\n\n\n<li>URL\u304c\u6052\u4e45\u7684\u306b\u5909\u66f4\u3055\u308c\u305f\u5834\u5408<\/li>\n\n\n\n<li>SEO\u8003\u616e\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  # \u65e7URL\u304b\u3089\u65b0URL\u3078\u306e\u6052\u4e45\u7684\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n  redirect_to new_url, status: :moved_permanently<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>302\uff08Found\uff09<\/li>\n\n\n\n<li>\u4e00\u6642\u7684\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8<\/li>\n\n\n\n<li>\u901a\u5e38\u306e\u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u5f8c\u306e\u9077\u79fb<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  # \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u52d5\u4f5c\n  redirect_to success_path<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>303\uff08See Other\uff09<\/li>\n\n\n\n<li>POST\u5f8c\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\uff08PRG\u30d1\u30bf\u30fc\u30f3\uff09<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  # POST\u30ea\u30af\u30a8\u30b9\u30c8\u5f8c\u306b\u5225\u30da\u30fc\u30b8\u3078\u9077\u79fb\n  redirect_to confirmation_path, status: :see_other<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001<code>redirect_to<\/code>\u306f\u5358\u306a\u308b\u753b\u9762\u9077\u79fb\u4ee5\u4e0a\u306e\u6a5f\u80fd\u3092\u6301\u3064\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002\u9069\u5207\u306a\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3068\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eUX\u3068SEO\u306e\u4e21\u65b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">redirect_to\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3088\u3046<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30b7\u30f3\u30d7\u30eb\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p><code>redirect_to<\/code>\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u306f\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u69d8\u3005\u306a\u5f62\u5f0f\u3067\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PostsController &lt; ApplicationController\n  # URL\u30d1\u30b9\u3092\u76f4\u63a5\u6307\u5b9a\n  def index\n    redirect_to '\/dashboard'\n  end\n\n  # \u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u3092\u4f7f\u7528\uff08\u63a8\u5968\uff09\n  def show\n    redirect_to posts_path\n  end\n\n  # \u30e2\u30c7\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6307\u5b9a\n  def create\n    @post = Post.create(post_params)\n    redirect_to @post  # show\u753b\u9762\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n  end\n\n  # :back\u3067\u76f4\u524d\u306e\u30da\u30fc\u30b8\u3078\u623b\u308b\n  def cancel\n    redirect_to :back\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u542b\u3080\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u66f8\u304d\u65b9<\/h3>\n\n\n\n<p>\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3084\u8ffd\u52a0\u60c5\u5831\u3092\u542b\u3081\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3082\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SearchController &lt; ApplicationController\n  def search\n    # \u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u542b\u3080\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n    redirect_to search_results_path(\n      keyword: params[:q],\n      category: 'books',\n      page: 1\n    )\n  end\n\n  def filter\n    # \u30cf\u30c3\u30b7\u30e5\u3067\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\n    redirect_to({\n      controller: 'products',\n      action: 'index',\n      status: 'active',\n      sort: 'price'\n    })\n  end\n\n  def show_product\n    # URL\u30d8\u30eb\u30d1\u30fc\u3068\u5909\u6570\u306e\u7d44\u307f\u5408\u308f\u305b\n    product = Product.find(params[:id])\n    redirect_to product_path(product, format: :json)\n  end\nend<\/pre>\n\n\n\n<p>\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u6307\u5b9a\u65b9\u6cd5\uff1a<\/p>\n\n\n<div id=\"id-60ad0110-82f6-4427-b10a-06f522e6dcc2\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6307\u5b9a\u65b9\u6cd5<\/th><th>\u4f7f\u7528\u4f8b<\/th><th>\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td>\u30af\u30a8\u30ea\u6587\u5b57\u5217<\/td><td><code>redirect_to posts_path(q: 'ruby')<\/code><\/td><td>\u691c\u7d22\u6761\u4ef6\u306e\u5f15\u304d\u7d99\u304e<\/td><\/tr><tr><td>\u30bb\u30b0\u30e1\u30f3\u30c8\u5909\u6570<\/td><td><code>redirect_to user_post_path(@user, @post)<\/code><\/td><td>RESTful\u306aURL\u751f\u6210<\/td><\/tr><tr><td>\u30a2\u30f3\u30ab\u30fc<\/td><td><code>redirect_to post_path(@post, anchor: 'comments')<\/code><\/td><td>\u7279\u5b9a\u4f4d\u7f6e\u3078\u306e\u9077\u79fb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6d3b\u7528\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u306e\u5411\u4e0a<\/h3>\n\n\n\n<p><code>redirect_to<\/code>\u3068\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u9069\u5207\u306a\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ArticlesController &lt; ApplicationController\n  def create\n    @article = Article.new(article_params)\n\n    if @article.save\n      # \u6210\u529f\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      redirect_to @article, notice: '\u8a18\u4e8b\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f'\n    else\n      render :new\n    end\n  end\n\n  def update\n    @article = Article.find(params[:id])\n\n    if @article.update(article_params)\n      # alert\u30bf\u30a4\u30d7\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8a2d\u5b9a\n      flash[:alert] = '\u8a18\u4e8b\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f'\n      redirect_to articles_path\n    else\n      render :edit\n    end\n  end\n\n  def destroy\n    @article = Article.find(params[:id])\n    @article.destroy\n\n    # \u8907\u6570\u306e\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8a2d\u5b9a\n    flash[:notice] = '\u8a18\u4e8b\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f'\n    flash[:alert] = '\u524a\u9664\u3092\u53d6\u308a\u6d88\u3059\u5834\u5408\u306f\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044'\n    redirect_to articles_path\n  end\nend<\/pre>\n\n\n\n<p>\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u7a2e\u985e\u3068\u4f7f\u3044\u5206\u3051\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>notice<\/code>: \u6210\u529f\u3084\u6b63\u5e38\u5b8c\u4e86\u306e\u901a\u77e5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   redirect_to root_path, notice: '\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3057\u305f'<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><code>alert<\/code>: \u8b66\u544a\u3084\u6ce8\u610f\u559a\u8d77<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   redirect_to settings_path, alert: '\u3053\u306e\u64cd\u4f5c\u306f\u53d6\u308a\u6d88\u305b\u307e\u305b\u3093'<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30bf\u30a4\u30d7<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   flash[:info] = '\u65b0\u6a5f\u80fd\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f'\n   redirect_to dashboard_path<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b\u3053\u3068\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u753b\u9762\u9077\u79fb\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">\u77e5\u3063\u3066\u304a\u304f\u3079\u304d9\u3064\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u6761\u4ef6\u5206\u5c90\u3092\u4f7f\u3063\u305f\u52d5\u7684\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5236\u5fa1<\/h3>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u306e\u72b6\u614b\u3084\u6a29\u9650\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u3092\u52d5\u7684\u306b\u6c7a\u5b9a\u3059\u308b\u5b9f\u88c5\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ApplicationController &lt; ActionController::Base\n  def after_sign_in_path_for(user)\n    # \u30e6\u30fc\u30b6\u30fc\u306e\u5f79\u5272\u306b\u5fdc\u3058\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u3092\u5909\u66f4\n    case user.role\n    when 'admin'\n      admin_dashboard_path\n    when 'manager'\n      team_dashboard_path\n    else\n      root_path\n    end\n  end\nend\n\nclass ArticlesController &lt; ApplicationController\n  def show\n    @article = Article.find(params[:id])\n\n    # \u8a18\u4e8b\u306e\u72b6\u614b\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30da\u30fc\u30b8\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n    case @article.status\n    when 'draft'\n      redirect_to preview_article_path(@article) unless current_user.can_preview?\n    when 'archived'\n      redirect_to articles_path, alert: '\u8a72\u5f53\u8a18\u4e8b\u306f\u30a2\u30fc\u30ab\u30a4\u30d6\u3055\u308c\u3066\u3044\u307e\u3059'\n    when 'premium'\n      redirect_to subscription_path unless current_user.premium?\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30cd\u30b9\u30c8\u5316\u3055\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u624b\u6cd5<\/h3>\n\n\n\n<p>\u8907\u96d1\u306a\u968e\u5c64\u69cb\u9020\u3092\u6301\u3064\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u9069\u5207\u306b\u51e6\u7406\u3059\u308b\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class CommentsController &lt; ApplicationController\n  def create\n    @post = Post.find(params[:post_id])\n    @comment = @post.comments.build(comment_params)\n\n    if @comment.save\n      # \u30cd\u30b9\u30c8\u3055\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u306e\u30d1\u30b9\u3092\u751f\u6210\n      redirect_to post_comment_path(@post, @comment)\n    else\n      # \u30a8\u30e9\u30fc\u6642\u306f\u89aa\u30ea\u30bd\u30fc\u30b9\u306e\u8a73\u7d30\u30da\u30fc\u30b8\u3078\n      redirect_to post_path(@post), alert: @comment.errors.full_messages.join(', ')\n    end\n  end\n\n  def update\n    @organization = Organization.find(params[:organization_id])\n    @project = @organization.projects.find(params[:project_id])\n    @task = @project.tasks.find(params[:task_id])\n\n    # \u6df1\u3044\u30cd\u30b9\u30c8\u306e\u5834\u5408\u306f\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\u3092\u4f5c\u6210\n    redirect_to nested_resource_path(@organization, @project, @task)\n  end\n\n  private\n\n  def nested_resource_path(*resources)\n    resources.inject(nil) do |path, resource|\n      path ? [path, resource] : resource\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">CRUD\u51e6\u7406\u5f8c\u306e\u6b63\u3057\u3044\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u8a08<\/h3>\n\n\n\n<p>RESTful\u306a\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u5f8c\u306e\u9069\u5207\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u9078\u629e\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ProductsController &lt; ApplicationController\n  def create\n    @product = Product.new(product_params)\n\n    if @product.save\n      # PRG\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\n      redirect_to @product, status: :see_other, notice: '\u5546\u54c1\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f'\n    else\n      render :new\n    end\n  end\n\n  def update\n    @product = Product.find(params[:id])\n\n    if @product.update(product_params)\n      # \u66f4\u65b0\u5f8c\u306f\u4e00\u89a7\u304b\u8a73\u7d30\u304b\u3092\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u5236\u5fa1\n      redirect_to(params[:return_to] == 'index' ? products_path : @product)\n    else\n      render :edit\n    end\n  end\n\n  def destroy\n    @product = Product.find(params[:id])\n    @product.destroy\n\n    # \u524a\u9664\u5f8c\u306f\u5e38\u306b\u4e00\u89a7\u753b\u9762\u3078\n    redirect_to products_path, notice: '\u5546\u54c1\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f'\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u5916\u90e8URL\u3078\u306e\u5b89\u5168\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u5916\u90e8URL\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u5b89\u5168\u306b\u884c\u3046\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class RedirectController &lt; ApplicationController\n  SAFE_HOSTS = ['example.com', 'trusted-domain.com'].freeze\n\n  def external_redirect\n    redirect_url = params[:redirect_to]\n\n    if safe_redirect_url?(redirect_url)\n      redirect_to redirect_url\n    else\n      redirect_to root_path, alert: '\u5b89\u5168\u3067\u306a\u3044\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f'\n    end\n  end\n\n  private\n\n  def safe_redirect_url?(url)\n    uri = URI.parse(url)\n    SAFE_HOSTS.include?(uri.host)\n  rescue URI::InvalidURIError\n    false\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30d0\u30c3\u30af\u30a8\u30f3\u30c9API\u3067\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h3>\n\n\n\n<p>API\u30e2\u30fc\u30c9\u3067\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Api::V1::SessionsController &lt; Api::V1::BaseController\n  def create\n    if user = User.authenticate(params[:email], params[:password])\n      # API\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3057\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      token = user.generate_api_token\n      redirect_to api_v1_user_path(user), status: :see_other,\n                                         headers: { 'Authorization' =&gt; \"Bearer #{token}\" }\n    else\n      render json: { error: '\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f' }, status: :unauthorized\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">Turbo\u3068redirect_to\u306e\u9023\u643a\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>Turbo\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u306e\u52b9\u7387\u7684\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PostsController &lt; ApplicationController\n  def create\n    @post = Post.new(post_params)\n\n    if @post.save\n      # Turbo Stream\u3067\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      respond_to do |format|\n        format.turbo_stream { redirect_to @post }\n        format.html { redirect_to @post }\n      end\n    else\n      render :new\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3067\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30c6\u30b9\u30c8\u65b9\u6cd5<\/h3>\n\n\n\n<p>RSpec\u3092\u4f7f\u7528\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u30c6\u30b9\u30c8\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">RSpec.describe PostsController, type: :controller do\n  describe 'POST #create' do\n    context '\u6b63\u5e38\u306a\u5165\u529b\u306e\u5834\u5408' do\n      let(:valid_params) { { post: { title: '\u8a18\u4e8b\u30bf\u30a4\u30c8\u30eb', content: '\u5185\u5bb9' } } }\n\n      it '\u4f5c\u6210\u5f8c\u306b\u8a18\u4e8b\u8a73\u7d30\u30da\u30fc\u30b8\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u3053\u3068' do\n        post :create, params: valid_params\n        expect(response).to redirect_to(post_path(Post.last))\n      end\n\n      it '\u9069\u5207\u306a\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u304c\u8fd4\u3055\u308c\u308b\u3053\u3068' do\n        post :create, params: valid_params\n        expect(response).to have_http_status(:redirect)\n      end\n    end\n  end\n\n  describe 'DELETE #destroy' do\n    let!(:post) { create(:post) }\n\n    it '\u524a\u9664\u5f8c\u306b\u8a18\u4e8b\u4e00\u89a7\u30da\u30fc\u30b8\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u3053\u3068' do\n      delete :destroy, params: { id: post.id }\n      expect(response).to redirect_to(posts_path)\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30a2\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ApplicationController &lt; ActionController::Base\n  before_action :store_location\n\n  protected\n\n  def store_location\n    # \u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u73fe\u5728\u306eURL\u3092\u4fdd\u5b58\uff08\u30db\u30ef\u30a4\u30c8\u30ea\u30b9\u30c8\u65b9\u5f0f\uff09\n    if request.get? &amp;&amp; request.path != '\/login' &amp;&amp; !request.xhr?\n      session[:return_to] = request.original_url\n    end\n  end\n\n  def safe_redirect_back_or_default(default)\n    redirect_to(session[:return_to] || default)\n    session.delete(:return_to)\n  end\nend\n\nclass SessionsController &lt; ApplicationController\n  def create\n    if user = User.authenticate(params[:email], params[:password])\n      # \u30ed\u30b0\u30a4\u30f3\u524d\u306e\u30da\u30fc\u30b8\u307e\u305f\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u30da\u30fc\u30b8\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      safe_redirect_back_or_default(root_path)\n    else\n      render :new\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u610f\u8b58\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class HighTrafficController &lt; ApplicationController\n  # \u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n  def show\n    key = \"redirect_destination_#{params[:id]}\"\n    redirect_url = Rails.cache.fetch(key, expires_in: 1.hour) do\n      calculate_redirect_destination\n    end\n\n    redirect_to redirect_url\n  end\n\n  private\n\n  def calculate_redirect_destination\n    # \u8907\u96d1\u306a\u8a08\u7b97\u3092\u884c\u3044\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u3092\u6c7a\u5b9a\n    # \u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u518d\u8a08\u7b97\u3092\u9632\u3050\n  end\nend\n\nclass BulkOperationsController &lt; ApplicationController\n  def process_items\n    # \u30d0\u30c3\u30c1\u51e6\u7406\u7528\u306e\u30b8\u30e7\u30d6\u3092\u30ad\u30e5\u30fc\u306b\u5165\u308c\u308b\n    job_id = BulkProcessJob.perform_later(params[:items])\n\n    # \u51e6\u7406\u72b6\u6cc1\u78ba\u8a8d\u30da\u30fc\u30b8\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n    redirect_to status_path(job_id)\n  end\nend<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30c0\u30d6\u30eb\u30ec\u30f3\u30c0\u30fc\u30a8\u30e9\u30fc\u306e\u539f\u56e0\u3068\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<p>\u300cCan\u2019t render or redirect more than once per action\u300d\u3068\u3044\u3046\u30a8\u30e9\u30fc\u306f\u3001Rails\u958b\u767a\u3067\u3088\u304f\u906d\u9047\u3059\u308b\u554f\u984c\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u274c \u60aa\u3044\u4f8b\uff1a\u8907\u6570\u56de\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\/\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\ndef show\n  @user = User.find(params[:id])\n  redirect_to login_path unless @user.active?\n  render :show  # \u3053\u3053\u3067\u30a8\u30e9\u30fc\u767a\u751f\uff01\nend\n\n# \u2705 \u826f\u3044\u4f8b\uff1aearly return \u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\ndef show\n  @user = User.find(params[:id])\n  return redirect_to login_path unless @user.active?\n  render :show\nend\n\n# \u2705 \u826f\u3044\u4f8b\uff1aif-else\u69cb\u6587\u3092\u4f7f\u7528\ndef show\n  @user = User.find(params[:id])\n  if @user.active?\n    render :show\n  else\n    redirect_to login_path\n  end\nend<\/pre>\n\n\n\n<p>\u4e3b\u306a\u767a\u751f\u30d1\u30bf\u30fc\u30f3\u3068\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n<div id=\"id-ce05a4c2-a438-40c3-802e-ae7249f539fc\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>\u6761\u4ef6\u5206\u5c90\u6f0f\u308c<\/td><td>\u8907\u6570\u30d1\u30b9\u3067\u306erender\/redirect<\/td><td>early return\u30d1\u30bf\u30fc\u30f3\u306e\u4f7f\u7528<\/td><\/tr><tr><td>\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u5185\u306e\u4e8c\u91cd\u5b9f\u884c<\/td><td>before_action\u3067\u306e\u4e0d\u9069\u5207\u306a\u5236\u5fa1<\/td><td>\u9069\u5207\u306a\u6761\u4ef6\u5206\u5c90\u306e\u5b9f\u88c5<\/td><\/tr><tr><td>\u4f8b\u5916\u51e6\u7406\u3067\u306e\u91cd\u8907<\/td><td>rescue\u53e5\u3067\u306e\u4e0d\u9069\u5207\u306a\u30d5\u30ed\u30fc\u5236\u5fa1<\/td><td>\u30d5\u30ed\u30fc\u5236\u5fa1\u306e\u4e00\u5143\u5316<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u7121\u9650\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30eb\u30fc\u30d7\u306e\u9632\u6b62\u7b56<\/h3>\n\n\n\n<p>\u7121\u9650\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30eb\u30fc\u30d7\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u8457\u3057\u304f\u640d\u306a\u3046\u554f\u984c\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u274c \u60aa\u3044\u4f8b\uff1a\u6761\u4ef6\u306a\u3057\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\nclass ArticlesController &lt; ApplicationController\n  before_action :redirect_if_not_premium\n\n  def show\n    @article = Article.find(params[:id])\n  end\n\n  private\n\n  def redirect_if_not_premium\n    redirect_to upgrade_path unless current_user.premium?\n  end\nend\n\n# \u2705 \u826f\u3044\u4f8b\uff1a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u6761\u4ef6\u306e\u660e\u78ba\u5316\nclass ArticlesController &lt; ApplicationController\n  before_action :check_premium_access, only: [:show]\n\n  def show\n    @article = Article.find(params[:id])\n  end\n\n  private\n\n  def check_premium_access\n    return if current_user.premium?\n    return if request.path == upgrade_path  # \u30eb\u30fc\u30d7\u9632\u6b62\n\n    store_target_path\n    redirect_to upgrade_path\n  end\n\n  def store_target_path\n    session[:return_to] = request.original_url if request.get?\n  end\nend<\/pre>\n\n\n\n<p>\u7121\u9650\u30eb\u30fc\u30d7\u9632\u6b62\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u56de\u6570\u306e\u5236\u9650<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ApplicationController &lt; ActionController::Base\n  before_action :check_redirect_count\n\n  private\n\n  def check_redirect_count\n    session[:redirect_count] ||= 0\n    session[:redirect_count] += 1\n\n    if session[:redirect_count] &gt; 5\n      session[:redirect_count] = 0\n      render 'errors\/too_many_redirects', status: :loop_detected\n    end\n  end\nend<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u691c\u8a3c<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def safe_redirect\n  target_path = session[:return_to]\n  if target_path == request.path\n    # \u30eb\u30fc\u30d7\u691c\u51fa\u6642\u306f\u5b89\u5168\u306a\u30d1\u30b9\u3078\n    redirect_to root_path\n  else\n    redirect_to target_path\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u30d1\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u5bfe\u5fdc<\/h3>\n\n\n\n<p>\u5b58\u5728\u3057\u306a\u3044\u30d1\u30b9\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u9632\u3050\u305f\u3081\u306e\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ApplicationController &lt; ActionController::Base\n  rescue_from ActionController::RoutingError, with: :handle_routing_error\n\n  private\n\n  def safe_redirect_to(path, options = {})\n    if Rails.application.routes.recognize_path(path)\n      redirect_to(path, options)\n    else\n      # \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u30d1\u30b9\u3078\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      redirect_to(fallback_path, alert: '\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f')\n    end\n  rescue ActionController::RoutingError\n    redirect_to(fallback_path, alert: '\u7121\u52b9\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f')\n  end\n\n  def fallback_path\n    current_user ? dashboard_path : root_path\n  end\n\n  def handle_routing_error\n    redirect_to root_path, alert: '\u6307\u5b9a\u3055\u308c\u305f\u30da\u30fc\u30b8\u306f\u5b58\u5728\u3057\u307e\u305b\u3093'\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nclass PostsController &lt; ApplicationController\n  def show\n    @post = Post.find_by(id: params[:id])\n\n    if @post\n      # \u901a\u5e38\u306e\u8868\u793a\u51e6\u7406\n      render :show\n    else\n      # \u5b89\u5168\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      safe_redirect_to posts_path, alert: '\u6295\u7a3f\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f'\n    end\n  end\nend<\/pre>\n\n\n\n<p>\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306eTips\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ed\u30b0\u306e\u6d3b\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def redirect_with_logging(path, options = {})\n  Rails.logger.info \"Redirecting to: #{path} with options: #{options}\"\n  redirect_to(path, options)\nend<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5c65\u6b74\u306e\u8ffd\u8de1<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def track_redirect\n  session[:redirect_history] ||= []\n  session[:redirect_history] &lt;&lt; request.original_url\n  # \u6700\u65b0\u306e10\u4ef6\u306e\u307f\u4fdd\u6301\n  session[:redirect_history] = session[:redirect_history].last(10)\nend<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306b\u95a2\u3059\u308b\u591a\u304f\u306e\u554f\u984c\u3092\u672a\u7136\u306b\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-22\">redirect_to\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">RESTful\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u8a08\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>RESTful\u306a\u8a2d\u8a08\u306b\u57fa\u3065\u304f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u4e88\u6e2c\u53ef\u80fd\u3067\u4e00\u8cab\u6027\u306e\u3042\u308b\u632f\u308b\u821e\u3044\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PostsController &lt; ApplicationController\n  # CRUD\u64cd\u4f5c\u5f8c\u306e\u6a19\u6e96\u7684\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u30d1\u30bf\u30fc\u30f3\n  def create\n    @post = Post.new(post_params)\n\n    if @post.save\n      # POST\u5f8c\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\uff08PRG\u30d1\u30bf\u30fc\u30f3\uff09\n      redirect_to @post, status: :see_other, notice: '\u6295\u7a3f\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f'\n    else\n      render :new, status: :unprocessable_entity\n    end\n  end\n\n  # \u30ea\u30bd\u30fc\u30b9\u306b\u5fdc\u3058\u305f\u9069\u5207\u306a\u30d1\u30b9\u306e\u9078\u629e\n  def update\n    @post = Post.find(params[:id])\n\n    if @post.update(post_params)\n      case params[:context]\n      when 'list'\n        redirect_to posts_path\n      when 'dashboard'\n        redirect_to dashboard_path(anchor: \"post-#{@post.id}\")\n      else\n        redirect_to @post\n      end\n    else\n      render :edit, status: :unprocessable_entity\n    end\n  end\nend<\/pre>\n\n\n\n<p>RESTful\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306e\u539f\u5247\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u5f8c\u306f\u9069\u5207\u306a\u753b\u9762\u3078\u9077\u79fb<\/li>\n\n\n\n<li>PRG\u30d1\u30bf\u30fc\u30f3\u306e\u9069\u7528<\/li>\n\n\n\n<li>\u4e00\u8cab\u6027\u306e\u3042\u308b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u9069\u5207\u306aHTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u306e\u4f7f\u7528<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u8003\u616e\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u5411\u4e0a\u3055\u305b\u308b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ApplicationController &lt; ActionController::Base\n  # \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u524d\u306e\u72b6\u614b\u3092\u4fdd\u5b58\n  def store_user_location!\n    store_location_for(:user, request.fullpath)\n  end\n\n  # \u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\n  def redirect_with_feedback(path, options = {})\n    # \u51e6\u7406\u6642\u9593\u306e\u76ee\u5b89\u3092\u63d0\u4f9b\n    flash[:processing_time] = options.delete(:processing_time)\n\n    # \u9032\u884c\u72b6\u6cc1\u306e\u8868\u793a\n    flash[:progress] = options.delete(:progress)\n\n    redirect_to path, options\n  end\nend\n\nclass OrdersController &lt; ApplicationController\n  def create\n    @order = Order.new(order_params)\n\n    if @order.save\n      # \u51e6\u7406\u72b6\u6cc1\u3092\u542b\u3081\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n      redirect_with_feedback(\n        order_confirmation_path(@order),\n        notice: '\u6ce8\u6587\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f',\n        processing_time: '5-10\u5206',\n        progress: 'processing'\n      )\n    else\n      render :new\n    end\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u8003\u616e\u3057\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># app\/services\/redirect_handler.rb\nclass RedirectHandler\n  def initialize(controller)\n    @controller = controller\n  end\n\n  def redirect_based_on_role(user)\n    case user.role\n    when 'admin'\n      @controller.admin_dashboard_path\n    when 'manager'\n      @controller.team_dashboard_path\n    else\n      @controller.root_path\n    end\n  end\n\n  def redirect_after_action(resource, action)\n    case action\n    when :create\n      @controller.send(\"#{resource.class.name.downcase}_path\", resource)\n    when :update\n      handle_update_redirect(resource)\n    when :destroy\n      @controller.send(\"#{resource.class.name.downcase.pluralize}_path\")\n    end\n  end\n\n  private\n\n  def handle_update_redirect(resource)\n    return_path = @controller.params[:return_to]\n    if return_path &amp;&amp; valid_return_path?(return_path)\n      return_path\n    else\n      @controller.send(\"#{resource.class.name.downcase}_path\", resource)\n    end\n  end\n\n  def valid_return_path?(path)\n    Rails.application.routes.recognize_path(path)\n    true\n  rescue ActionController::RoutingError\n    false\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nclass PostsController &lt; ApplicationController\n  def create\n    @post = Post.new(post_params)\n\n    if @post.save\n      redirect_to redirect_handler.redirect_after_action(@post, :create)\n    else\n      render :new\n    end\n  end\n\n  private\n\n  def redirect_handler\n    @redirect_handler ||= RedirectHandler.new(self)\n  end\nend<\/pre>\n\n\n\n<p>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u306e\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b\u305f\u3081\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5206\u96e2<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u306e\u4e00\u5143\u7ba1\u7406<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u62e1\u5f35\u6027\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u610f\u8b58\u3059\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-1468","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ruby","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1468"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1468\/revisions"}],"predecessor-version":[{"id":1469,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1468\/revisions\/1469"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}