shou2017.com
JP / EN

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

Sun Jul 30, 2017
Sat Aug 10, 2024

やりたいこと

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

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

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

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

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

<%= 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メソッドを作成する

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

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

以上。

See Also