通过periodic_call_remote发送更改的参数

时间:2010-05-02 12:22:00

标签: ruby-on-rails ruby ajax

我正在使用periodically_call_remote来更新包含对象列表的页面的一部分。我向url发送一个包含数据库中最新对象的created_at日期的param。然后调用的操作将获取自此以后创建的所有对象,并呈现一个部分,将其显示在列表顶部。

问题是我似乎无法弄清楚如何制作它以便下一次periodically_call_remote触发它沿着created_at日期发送新的最新对象(如果有的话)。我尝试将periodically_call_remote置于正在渲染的部分内部,但这会导致各种问题(This解释了为什么不应该这样做)。

我可以通过某种方式让periodically_call_remote每次调用时都发送新的参数吗?就像现在一样,它只是反复发送相同的一个,这意味着新对象不止一次被渲染。

2 个答案:

答案 0 :(得分:2)

你说哈克里? :)

将参数存储在隐藏的div中。您可以通过Javascript访问该div的内容,periodic_call_remote将接受:with 选项的一部分。

当参数更改时,只需更新隐藏div的内容作为控制器操作的一部分。

所以,例如......

<div id="date_to_check_from" style="display:none;"><%= @initial_created_at %></div>

<%= periodically_call_remote :url => path_to_controller(@normal_params), :with => "'date_to_check_from=' + $('#date_to_check_from').html()", :method => :get, :frequency => 10 %>

这会让你的控制器中的params [:date_to_check_from]。然后根据需要更新,例如,

render :update do |page|
   page << "$('#date_to_check_from').html('#{@new_date_to_check_from}');
end

答案 1 :(得分:0)

可以做一些hackery,但我建议您开始考虑编写自己的JavaScript代码来执行AJAX请求。像periodically_call_remote这样的Rails助手并不适合在如此复杂的情况下使用。