我正在创建我的第一个应用,简单的博客,而且我不知道如何显示没有通过验证的嵌套资源(评论)的错误消息。
这是为评论创建行动:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
redirect_to post_path(@post)
end
这是评论表:
<%= form_for([@post, @post.comments.build]) do |f| %>
<p>
<%= f.label :commenter %><br />
<%= f.text_field :commenter %>
</p>
<p>
<%= f.label :text %><br />
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
我尝试过:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(comment_params)
if @comment.save
redirect_to post_path(@post)
else
render '/comments/_form'
end
end
和:
<% if @comment.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@comment.errors.count, "error") %> prohibited
this comment from being saved:
</h2>
<ul>
<% @comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
但我不知道什么是错的。
答案 0 :(得分:2)
您无法从控制器渲染部分内容。更好的选择是创建new
视图。
class CommentsController
def create
if @comment.save
redirect_to post_path(@post), success: 'comment created'
else
render :new
end
end
end
应用程序/视图/评论/ new.html.erb:
<% if @comment.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@comment.errors.count, "error") %> prohibited
this comment from being saved:
</h2>
<ul>
<% @comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= render partial: 'form', comment: @comment %>
应用程序/视图/评论/ _form.html.erb:
<%= form_for([@post, local_assigns[:comment] || @post.comments.build]) do |f| %>
<p>
<%= f.label :commenter %><br />
<%= f.text_field :commenter %>
</p>
<p>
<%= f.label :text %><br />
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>