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

在这种情况下,您不应该使用重定向,而是使用渲染:

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 回答
-1

您不能使用redirect_to来显示对象的错误消息,因为在重定向时它会丢弃与 error_messages 链接的对象并使用新对象来重定向路径。

所以在这种情况下,你只需要使用render

respond_to do |format|
        format.html { 
          flash[:error] = @account.errors.full_messages.join(', ')
          render "edit", :id => @account._id, sid: @account.site._id
        }
end
于 2018-05-31T08:32:56.903 回答