【问题标题】:Using AJAX to display error message Ruby on Rails使用 AJAX 显示错误消息 Ruby on Rails
【发布时间】:2010-04-23 17:02:17
【问题描述】:

我已经使用 Ruby on Rails 构建了一个博客。两者都是新手。在进入错误处理部分之前,我正在非常有效地实现 AJAX。

我允许在帖子上使用 cmets,并通过在 /views/posts/show.html.erb 页面中呈现评论部分和远程表单来做到这一点。成功保存评论后,会使用views/cmets/create.js.rjs 更新显示页面并显示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 %>

/views/cmets/_comment.html.erb

<% div_for comment do %>
<div id="comment-wrapper">

        <%  if admin? %>
        <div id="comment-destroy"><%=link_to_remote "X", :url => [@post, comment], :method => :delete %></div>
        <% end %>
        <%= h(comment.body) %><br/><br/>
        <div class="small">Posted <%= time_ago_in_words(comment.created_at) %> ago by <%= h(comment.name) %> 
        <%  if admin? %>
         | <%= h(comment.email) %>

        <% end %></div>

    </div>
<% end %>

/views/cmets/create.js.rjs

page.insert_html :bottom, :comments, :partial => @comment
page[@comment].visual_effect :highlight 
page[:new_comment].reset
page.replace_html :notice, flash[:notice]
flash.discard

评论控制器#create

 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 

【问题讨论】:

  • 请注意,您实际上是通过create!save 两次尝试保存记录。虽然与问题无关:)
  • 啊,就像我说的,对这个很陌生。你会删除创建!方法?
  • 我认为@post.cmets.build(params[:comment]) 可能会更好

标签: ruby-on-rails ruby error-handling


【解决方案1】:

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

就像 Corey 说的,替换 create!与构建。你通过 rjs 显示 flash 通知的策略可能会奏效。

【讨论】:

  • 啊,构建成功创建。事实上,它也适用于创建失败,但它没有通过 ajax 更新。例如。如果我将评论留空并尝试添加(不会验证验证),它什么也不做。如果我立即点击刷新,它会显示错误消息。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 2022-01-26
  • 1970-01-01
  • 2014-04-28
  • 2016-09-21
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多