表单不显示嵌套资源的错误消息

时间:2014-03-05 06:04:39

标签: ruby-on-rails ruby-on-rails-4

当用户尝试提交空白评论时,我无法收到错误消息。在创建失败时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 %>

1 个答案:

答案 0 :(得分:2)

<%= form_for([@post, @post.comments.build], :html => { :role => "form" }) do |f| %>

这总是为空白评论对象创建一个表单。所以在创建动作后,它会做同样的事情,这就是为什么你没有收到任何错误。

由于您已在@comment操作中对create进行了初始化,因此您可以在表单中使用它来获取该@comment对象的错误消息。我相信您已在@comment操作中初始化了show对象,以便为showcreate操作处理部分表单。

请尝试使用以下

<%= form_for([@post, @comment], :html => { :role => "form" }) do |f| %>