4

したがって、root_path 内の部分としてレンダリングされるフォームからエラーを取得しようとしています。投稿しようとして失敗 (または成功) した後、root_path にリダイレクトしたいと考えています。ただし、redirect_to は検証用の情報を保存しないことを決定します。

これを行う方法を疑問に思います。

class PostsController < ApplicationController
  def new
    @post = Post.new
  end

  def create
    @nom = current_user.noms.build(params[:nom])
    if @nom.save
      flash[:success] = "Nom created!"
      redirect_to root_path
    else
      flash[:error] = @nom.errors
      redirect_to root_path
  end

私のホーム/インデックスでは、投稿のフォームの部分をレンダリングします。

= form_for [current_user, @post] do |f|
  = f.text_field :name
  = f.select :category
  = f.text_area :description
  = f.submit "Post", class: "btn btn-primary"

  - @post.errors.full_messages.each do |msg|
    %p
      = msg

root_path にリダイレクトした後、フォームの下部にエラーを保持する必要があります。

また、検証が失敗した後にそこにあった情報を保持したいと思います。

4

3 に答える 3

5

この場合、redirect を使用しないでください。代わりに render を使用してください。

class PostsController < ApplicationController
  #..

  def create
    @nom = current_user.noms.build(params[:nom])
    if @nom.save
      flash[:success] = "Nom created!"
      redirect_to root_path
    else
      flash[:error] = @nom.errors
      render :template => "controller/index"
    end
  end

controller/indexコントローラーとアクションの名前に置き換えます

こちらの質問もチェック

于 2013-04-19T01:49:03.650 に答える
1

これは私にとってはうまくいくようでした

format.html { redirect_to :back, flash: {:errors => "Document "+@requested_doc.errors.messages[:document][0] }}

これが他の例外の問題を引き起こす可能性があるかどうかはわかりません。

于 2014-12-22T06:12:15.663 に答える