railsでvalidationで弾かれて再度postした際にrouting errorになる

2 min 41 views
muraoka

muraoka

pixiv、nanaでプロダクトマネージャーを経験。
現在はマーケティングやwebサービス開発のコンサルティングを行っています。

FOLLOW

railsでvalidationに弾かれた際に再度postしようとするとrouting errorになってしまうのでその対策。flashを使って対応したが、もっといいやり方がある気がする。

状況

railsのバグ?なのか

  • usersをpostをしようとする
  • validationで同じページに戻る
  • urlがroot/usersに
  • もう一回postするとrouting errorに

上記の状況になる。routing errorはroot/usersでpostをしたけどget root/users扱いになりrouting errorになる。

redirect_to new_career_path

redirect_toで遷移させるとちゃんとusers/newに遷移するが、そうすると前の値を残していないので再度入力しないといけない。

流れ

  • flashで値を保存
  • redirect_toで遷移
  • 遷移先でflashから値を受け取る

flashで値を保存

下記のコードでsaveが失敗した際にはflashに格納

    if @career.save
      flash[:notice] = "登録しました!"
      redirect_back(fallback_location: root_path) and return
    else
      flash[:alert] = "登録に失敗しました。" + @career.errors.full_messages.first
      flash[:career] = @career
      redirect_to new_career_path
    end

redirect_toで遷移

redirect_to new_career_path

redirect_toで遷移。これによりurlが変わる。

遷移先でflashから値を受け取る

下記のnewメソッドでflashに値があるときはそれを使うように。

def new
    @career = flash[:career] ? Career.new(flash[:career]) : Career.new
    @aircard = Aircard.find_by(user_id: current_user.id)
  end
muraoka

muraoka

pixiv、nanaでプロダクトマネージャーを経験。
現在はマーケティングやwebサービス開発のコンサルティングを行っています。

FOLLOW

関連記事