所以我试图从我的表单中获取错误,该错误在我的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后将错误保留在表单的底部。
我还想保留验证失败后的信息。
答案 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