1
0

form_withメソッドにおける、URLの違いによる遷移先や起動するアクションの違いについて

Last updated at Posted at 2023-09-29

スクールのテキストでツイッターのようなアプリを作成中、投稿新規作成画面で「保存」ボタン、を押した場合と、投稿新規作成画面から一度「戻る」ボタンで戻り、再度「保存」ボタンを押した場合で、起動するアクションが異なることについて疑問で、メンターさんに教えてもらったことを記事にまとめたいと思います。

開発環境

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アクションへとぶ。(一番下のルーティングの画像参照)

スクリーンショット 2023-09-28 12.45.08.png

create blogのボタンを押した後、下記画面に遷移する。
スクリーンショット 2023-09-28 12.48.38.png
ここでは、

<form action="/blogs" accept-charset="UTF-8" method="post">
省略
</form>

となっており、actionが、"/blogs"、methodが"post"ということで、「登録する」ボタン又は「戻る」ボタンを押すと、postメソッドでURLが"/blogs"のところ、つまり、blogs#create、create、アクションへとぶ。(一番下のルーティングの画像参照)

今回は、戻るボタンを押したとすると、下記画面となる。

スクリーンショット 2023-09-28 12.51.04.png
また見てみると、

<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アクションにとぶように設定し直す必要がある。

blogs_helper.rb
module BlogsHelper
 def choose_new_or_edit
    if action_name == "new" 
        confirm_blogs_path
    elsif action_name == "edit"
        blog_path
    end
 end
end

を下記のように変更する。

blogs_helper.rb
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投稿でした!
お疲れ様でした〜!

↓ルーティングの画面
スクリーンショット 2023-09-28 14.02.55.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0