Ruby on rails 使用AJAX在Ruby on Rails上显示错误消息

Ruby on rails 使用AJAX在Ruby on Rails上显示错误消息,ruby-on-rails,ruby,error-handling,Ruby On Rails,Ruby,Error Handling,我用RubyonRails构建了一个博客。两者都是新事物。在进入错误处理部分之前,我一直在非常有效地实现AJAX 我允许对帖子发表评论,并通过在/views/posts/show.html.erb页面中呈现评论部分和远程表单来实现。成功保存评论后,将使用views/comments/create.js.rjs更新show页面,并显示一个flash通知 我只是想在没有保存的时候闪现一个通知。我四处搜寻,自己做了一些工作。无法让它飞起来。这是我的密码: /views/posts/show.html.

我用RubyonRails构建了一个博客。两者都是新事物。在进入错误处理部分之前,我一直在非常有效地实现AJAX

我允许对帖子发表评论,并通过在/views/posts/show.html.erb页面中呈现评论部分和远程表单来实现。成功保存评论后,将使用views/comments/create.js.rjs更新show页面,并显示一个flash通知

我只是想在没有保存的时候闪现一个通知。我四处搜寻,自己做了一些工作。无法让它飞起来。这是我的密码:

/views/posts/show.html.erb

<div id="comments">

    <%= render :partial => @post.comments %>
    <div id="notice"><%= flash[:notice] %></div> 
</div>

<% remote_form_for [@post, Comment.new] do |f| %>

    <p>
        <%= f.label :body, "New Comment" %><br/>
        <%= f.text_area (:body, :class => "textarea") %>
    </p>
    <p>
        <%= f.label :name, "Name" %><br/>
        <%= f.text_field (:name, :class => "textfield") %>
    </p>
    <p>
        <%= f.label :email, "Email" %><br/>
        <%= f.text_field (:email, :class => "textfield") %>
    </p>
    <p><%= f.submit "Add Comment" %></p>
<% end %>
CommentsController创建

 def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.create!(params[:comment])

   respond_to do |format|
     if @comment.save
       flash[:notice] = "Thanks for adding this comment" 
       format.html { redirect_to @post }
       format.js
     else
       flash[:notice] = "Make sure you include your name and a valid email address" 
       format.html { redirect_to @post }
       format.js

   end
 end
end 

创造!是一个问题,因为创造!当模型无效时引发异常,这意味着对下面代码的响应将不会执行


就像科里说的,替换创建!有身材。您通过rjs显示flash通知的策略可能很有效。

请注意,您实际上试图通过create(创建)保存两次记录!然后保存。但与这个问题无关:啊,就像我说的,这是新的。你会删除创建!方法?我认为@post.comments.buildparams[:comment]可能更好,该构建成功创建。事实上,它在创建过程中也起到了作用,但没有通过ajax进行更新。例如。如果我将注释留空并尝试添加验证,它将不会执行任何操作。如果我立即点击刷新,它会显示错误消息。有什么想法吗?
page.insert_html :bottom, :comments, :partial => @comment
page[@comment].visual_effect :highlight 
page[:new_comment].reset
page.replace_html :notice, flash[:notice]
flash.discard
 def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.create!(params[:comment])

   respond_to do |format|
     if @comment.save
       flash[:notice] = "Thanks for adding this comment" 
       format.html { redirect_to @post }
       format.js
     else
       flash[:notice] = "Make sure you include your name and a valid email address" 
       format.html { redirect_to @post }
       format.js

   end
 end
end