当用户尝试提交空白评论时,我无法收到错误消息。在创建失败时render 'posts/show'
正确但它似乎没有发送我的error_messages部分期望的@comment
对象。有什么想法吗?
comments_controller.rb:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(comment_params)
@comment.user = current_user
if @comment.save
flash[:success] = "Comment created!"
redirect_to post_path(@post)
else
@comments = @post.comments.paginate(page: params[:page], :per_page => 5)
render 'posts/show' # => Renders but does not display errors???
end
end
posts_controller.rb:
def show
@post = Post.find(params[:id])
@comments = @post.comments.paginate(page: params[:page], :per_page => 5)
@comment = @post.comments.build if signed_in?
end
_comment_form.html.erb
<%= form_for([@post, @post.comments.build], :html => { :role => "form" }) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="form-group">
<%= f.label :content %>
<%= f.text_area :content, class: "form-control", placeholder: "Enter new comment..." %>
</div>
<div class="btn-group">
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
</div>
<% end %>
答案 0 :(得分:2)
<%= form_for([@post, @post.comments.build], :html => { :role => "form" }) do |f| %>
这总是为空白评论对象创建一个表单。所以在创建动作后,它会做同样的事情,这就是为什么你没有收到任何错误。
由于您已在@comment
操作中对create
进行了初始化,因此您可以在表单中使用它来获取该@comment
对象的错误消息。我相信您已在@comment
操作中初始化了show
对象,以便为show
和create
操作处理部分表单。
请尝试使用以下
<%= form_for([@post, @comment], :html => { :role => "form" }) do |f| %>