2

感谢您抽时间阅读!

好吧,这就是我想要做的,我有 Rails 应用程序,它显示一个表,显示数据库中的一些信息,我需要它来自动重新加载表(如果可能在部分重新加载,所以我不必重新加载整个页面。)当新数据添加到数据库时。

提前致谢!

4

2 回答 2

2

为了重新加载表数据,您必须首先通知客户端内容已更改,然后实际重新加载内容。为此,您必须在客户端使用 Javascript/Ajax:

  • 向控制器添加一个操作,以 JSON 格式返回最后更新的时间戳
  • 将时间戳存储在 JS 变量中
  • 每 n 秒调用一次操作,以便您可以比较本地和远程时间戳
  • 使用 Ajax 将您的表格部分替换为更新的表格

jQuery 随 Rails 一起提供,将非常有效地处理 Ajax 部分。请参阅jQuery.ajaxjQuery.replaceWith以用新内容替换旧内容。

在提供表格的控制器操作上,使用一个参数,以便您可以在从 Ajax 调用时禁用布局呈现。这样控制器将只提供相关内容(包含表格的视图)。

于 2012-09-29T12:18:47.873 回答
1

我会这样处理:

  • 使用 Javascript 的 setInterval 函数和 jQuery 的 $.get() 函数来加载页面,例如 /catalog/1/new_items。

setInterval(function(){
$.get("/catalog/1/new_items.js", function(data){
$("new_items").html(data);
},
"html")
}, 30000);

  • 创建一个 new_items.js.erb 并将其放在您的 app/views/posts 文件夹中。

new_items.js.erb 的内容:

<%= render partial: 'new_items', object: @catalog.new_items.last, as: :item %>
  • 使用您想要的任何内容创建上述部分(如果您不需要部分,您可以将 div 的全部内容写入 new_posts.js.erb 文件中。)

  • 将最新方法添加到您的目录控制器中,该方法定义@catalog等以供latest.js.erb使用。

  • 将 get '/latest' 添加到您的 routes.rb

于 2012-09-29T12:28:08.150 回答