スクールのテキストでツイッターのようなアプリを作成中、投稿新規作成画面で「保存」ボタン、を押した場合と、投稿新規作成画面から一度「戻る」ボタンで戻り、再度「保存」ボタンを押した場合で、起動するアクションが異なることについて疑問で、メンターさんに教えてもらったことを記事にまとめたいと思います。
開発環境
ruby -v 3.2.2
rails -v 6.1.7.6
まず、新規入力画面のページ、URLだと、/blogs/new
ここでディベロッパーツールで見てみると、
<form action="/blogs/confirm" accept-charset="UTF-8" method="post">
省略
</form>
となっており、actionが、"/blogs/confirm"、methodが"post"ということで、titleとcontentを入力しcreate blogのボタンを押すと、postメソッドでURL"/blogs/confirm"のところ、つまりblogs#confirm 、confirmアクションへとぶ。(一番下のルーティングの画像参照)
create blogのボタンを押した後、下記画面に遷移する。
ここでは、
<form action="/blogs" accept-charset="UTF-8" method="post">
省略
</form>
となっており、actionが、"/blogs"、methodが"post"ということで、「登録する」ボタン又は「戻る」ボタンを押すと、postメソッドでURLが"/blogs"のところ、つまり、blogs#create、create、アクションへとぶ。(一番下のルーティングの画像参照)
今回は、戻るボタンを押したとすると、下記画面となる。
<form action="/blogs" accept-charset="UTF-8" method="post">
省略
</form>
となっており、この状態でcreate blogのボタンを押すと、postメソッドでURL"/blogs"のところ、つまり、blogs#create、createアクションへとんでしまうので、先ほど新規入力画面(newのところ)の時のように、確認画面(「以下の内容で送信する」の画面)にとばなくなってしまう。
そのため、html.erbファイル内にある
<%= form_with(model: @blog, local: true,url: choose_new_or_edit) do |form| %>
の部分の、url部分のchoose_new_or_editメソッドの部分を変更し、action_nameがcreateの場合でも、confirmアクションにとぶように設定し直す必要がある。
module BlogsHelper
def choose_new_or_edit
if action_name == "new"
confirm_blogs_path
elsif action_name == "edit"
blog_path
end
end
end
を下記のように変更する。
module BlogsHelper
def choose_new_or_edit
if action_name == "new" || action_name == "create"
confirm_blogs_path
elsif action_name == "edit"
blog_path
end
end
end
こうすると、createアクションの時でも、confirm_blogs_path、つまりconfirmアクションの方にとぶようになり、一度戻った後でも、確認画面に遷移するようになる。
以上、これが初めてのQiita投稿でした!
お疲れ様でした〜!