对于使用哪种Prototype助手感到困惑

在阅读http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html后,我似乎无法找到我正在寻找的东西。 我有一个简单的模型,在消息列表达到24之后删除最旧的消息,模型就这么简单:

class Message  'updated_at DESC') messages[24..-1].each {|p| p.destroy } if messages.size >= 24 end end 

消息列表下方有一个消息表单,用于添加新消息。 我正在使用Prototype / RJS将新消息添加到列表顶部。 create.rjs:

 page.insert_html :top, :messages, :partial => @message page[@message].visual_effect :grow #page[dom_id(@messages)].replace :partial => @message page[:message_form].reset 

我的index.html.erb非常简单:

 
@messages %>
"message_form" %>

添加新邮件时,它们看起来很好,但是当达到24邮件限制时,它只是不断添加邮件而不删除旧邮件。 理想情况下,我希望它们随着新的添加而淡出,但它们可以消失。 create.rjs中的注释行实际上有效,它删除了过期的消息但是在添加新消息时我失去了视觉效果。 有没有人有一个关于如何完成添加和删除这个简单列表中的消息的建议? 非常感谢帮助。 谢谢阅读。 PS:在这种情况下,periodic_call_remote会有所帮助吗?

我将假设你的message部分看起来像这样:

 

Message Header

This is the body of the message

如果不是这种情况,请更改它。 每条消息都应该包含在divspan ,其中包含该消息的ID。 然后,您可以将以下方法添加到您的Message模型:

 def old_messages messages = Message.all(:order => 'updated_at DESC') if messages.size >= 24 return messages[24..-1] else return [] end end 

然后,在响应此请求的操作中,只需添加以下行:

 @old_messages = Message.old_messages 

并将您的RJS更改为:

 page.insert_html :top, :messages, :partial => @message page[@message].visual_effect :grow #page[dom_id(@messages)].replace :partial => @message page[:message_form].reset @old_messages.each do |m| page.remove(m.id) end 

你可以看到我正在使用rails remove方法来完成从DOM中取出不需要的消息的行为。

也许这些步骤可以帮助你。

  1. 将“已删除的消息”作为AR哈希数组或仅ID进行返回
  2. 在HTML元素的ID中为ID为AR对象的每条消息呈现HTML元素
  3. 使用ID标识表单上的HTML元素,并替换为空白HTML元素

而且你有一个有效的解决方案。 我希望这有帮助。