从部分重定向返回到具有部分的同一页面后保持验证错误

时间:2013-04-19 01:40:34

标签: ruby-on-rails

所以我试图从我的表单中获取错误,该错误在我的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后将错误保留在表单的底部。

我还想保留验证失败后的信息。

3 个答案:

答案 0 :(得分:4)

在这种情况下,您不应该使用重定向,而是使用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替换为您的控制器名称和操作

同时检查此question

答案 1 :(得分:1)

这似乎对我有用

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

我不知道这是否会导致任何其他异常问题。

答案 2 :(得分:-1)

您无法使用 redirect_to 来显示对象的错误消息,因为重定向会丢弃与error_messages&amp;链接的对象。拿了一个新对象来重定向路径。

因此,在这种情况下,您只需使用渲染

respond_to do |format|
        format.html { 
          flash[:error] = @account.errors.full_messages.join(', ')
          render "edit", :id => @account._id, sid: @account.site._id
        }
end