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