gpt4 book ai didi

ruby-on-rails - 对使用哪个 Prototype 助手感到困惑

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:21 26 4
gpt4 key购买 nike

看完http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html我似乎无法找到我要找的东西。我有一个简单的模型,它会在消息列表达到 24 条后删除最旧的消息,该模型非常简单:

class Message < ActiveRecord::Base
after_create :destroy_old_messages
protected
def destroy_old_messages
messages = Message.all(:order => 'updated_at DESC')
messages[24..-1].each {|p| p.destroy } if messages.size >= 24
end
end

在消息列表下方有一个消息表单,用于添加新消息。我正在使用 Prototype/RJS 将新消息添加到列表的顶部。创建.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 非常简单:

<div id="messages">
<%= render :partial => @messages %>
</div>
<%= render :partial => "message_form" %>

当添加新消息时,它们看起来很好,但是当达到 24 条消息限制时,它只会继续添加消息而不删除旧消息。理想情况下,我希望它们随着新的添加而淡出,但它们可以消失。 create.rjs 中的注释行确实有效,它删除了过期的消息,但在添加新消息时我失去了视觉效果。有没有人建议如何从这个简单的列表中添加和删除消息,同时对两者都有影响?帮助将不胜感激。谢谢阅读。 P.S.: periodically_call_remote 在这种情况下会有帮助吗?

最佳答案

我假设您的 message 部分在呈现后看起来像这样:

<div id='message_123'>
<h3>Message Header</h3>
<p>This is the body of the message</h3>
</div>

如果不是这种情况,请改变它。每条消息都应包装在 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 中取出的操作。

关于ruby-on-rails - 对使用哪个 Prototype 助手感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com