我正在尝试在Rails中实现错误消息,但我不知道它在某一时刻无法正常工作。
视图我正在尝试添加错误消息:
<%= form_for([@post, @post.comments.build], html: {class: 'form-horizontal'}) do |f| %>
<% if @comment.errors.any? %>
<div id="errorExplanation" class="span5 offset1 alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Something went wrong!</h4><br>
<% @post.errors.full_messages.each do |msg| %>
<p><%= msg %></p>
<% end %>
</div>
<% end %>
控制器:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
redirect_to post_path(@post)
end
错误信息:
nil的未定义方法`errors':NilClass 提取的来源(第65行):
<li>
<%= form_for([@post, @post.comments.build], html: {class: 'form-horizontal'}) do |f| %>
65 -> <% if @comment.errors.any? %>
<div id="errorExplanation" class="span5 offset1 alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
评论当然属于一个可以有很多评论的帖子。有帮助吗?我尝试了所有我能想到的东西(由于我是RoR的新手,但这并不多;) - 包括尝试获取错误消息的各种方法(@ post.comment.errors.any?等)。
提前致谢。 蒂莫
答案 0 :(得分:1)
从你的评论中可以看到很多事情。
您正在尝试创建注释,因此表单操作应该是CommentsController #create。 该视图有意义,它将是PostsController#show(您没有指定),并且在渲染之前您需要实例化@comment。可能:
<强> PostsController 强>
def show
@post = Post.find(params[:id])
@comment = @post.comments.build
end
<强> CommentsController 强>
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment].permit(:commenter, :body))
if @comment.save
redirect_to post_path(@post)
else
render :file => "posts/show"
end
end
请注意,您必须呈现而不是重定向,以便保留@comment实例并可以呈现错误。
posts / show.html.erb
<%= form_for([@post, @post.comments.build], html: {class: 'form-horizontal'}) do |f| %>
<% if @comment.errors.any? %>
这是否正确将取决于你的routes.rb。我假设评论是帖子中的嵌套资源,这是你的问题所能想到的。