search
LoginSignup
0

posted at

updated at

【Rails】redirect_toでリダイレクト先に値を引き継ぐ

コード

リダイレクト先に値を渡すにはflashを使うと良いです。

controller
flash[:user_params] = user_params
redirect_to action: :new

詳細

今回はJSを使うことなくサーバー側でバリデーションチェックから、
個々のinputへのエラー表示まで行う仕様だったので、
createでバリデーションチェックをして、
引っ掛かったらnewへ入力済みの値とエラーのカラムを渡す必要がありました。

controller
def new
  @user = flash.present? ? User.new(flash[:user_params]) : User.new
end

def create
  @user = User.new(user_params)
  if @user.invalid?
    flash[:user_params] = user_params
    redirect_to action: :new
  end
  # 以下バリデーションが通った時の処理
end

user_paramsはストロングパラメーターです。

追記

今回の本題ではないのですが、
サーバー側でバリデーションチェックで引っ掛かったカラム調べて、
それぞれの場所にメッセージ出すのであれば、
redirecet_toではなくrenderでも大丈夫だった件です。

controller
def create
  @user = User.new(user_params)
  return render :new if @user.invalid?
end
view
// エラーの中にnameが含まれているか?
= @user.errors.include?(:name)

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
What you can do with signing up
0