Helperメソッドを使ってアクションを分岐させる方法

Sun Jul 30, 2017 - rails
Mon Jan 13, 2020

やりたいこと

  • newアクションの時に確認画面へ(url: confirm_blogs_path)

  • updateアクションの時は一覧画面へ(blogs_path)

form_forはデフォルトで、引数によってどのようなURLで送信するかが決まってる

  • 引数がレコードに存在しない場合、createアクションへ送信します。

  • 引数がレコードに存在している場合、updateアクションへ送信します。

確認画面(cofirmアクション)へ送信するためには、オプションを与えて、送り先を変える必要があります。

ですので、単純にform_forを編集し、url: confirm_blogs_pathurlオプションを与え下のような形にしても良いが

1
<%= form_for(@blog, url: confirm_blogs_path) do |f| %>

これでは、editアクションを実行した時にエラーになります。このエラーを避けるためにHelperメソッドを作成し、newアクションの時は、url: confirm_blogs_pathオプションに、updateアクションのときはblogs_pathオプションが生成されるようにする。

app/helpers/blogs_helper.rbにhelperメソッドを作成する

1
2
3
4
5
6
7
8
9
module BlogsHelper
  def choose_new_or_edit
    if action_name == 'new' || action_name == 'confirm'
      confirm_blogs_path
    elsif action_name == 'edit'
      blog_path
    end
  end
end

定義したヘルパーメソッドを使用する

app/views/blogs/_form.html.erb

1
<%= form_for(@blog, url: choose_new_or_edit) do |f| %>

以上。

Tags: 逆引き
See Also