Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 当有新记录要自动显示时,如何在RubyonRails视图中刷新表_Jquery_Ruby On Rails - Fatal编程技术网

Jquery 当有新记录要自动显示时,如何在RubyonRails视图中刷新表

Jquery 当有新记录要自动显示时,如何在RubyonRails视图中刷新表,jquery,ruby-on-rails,Jquery,Ruby On Rails,感谢您抽出时间阅读此文章 嗯,这就是我正在尝试做的,我有一个Rails应用程序,它显示一个表,显示数据库中的一些信息,当新数据添加到数据库时,我需要它自动重新加载表(如果可能的话,部分重新加载,所以我不必重新加载整个页面) 提前谢谢 为了重新加载表数据,您必须首先通知客户端内容已更改,然后实际重新加载内容。要实现这一点,您必须在客户端使用Javascript/Ajax: 向控制器添加一个操作,返回上次更新的 JSON中的时间戳 将时间戳存储在JS变量中 每n秒调用一次操作,以便比较本地和远程时

感谢您抽出时间阅读此文章

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


提前谢谢

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

  • 向控制器添加一个操作,返回上次更新的 JSON中的时间戳
  • 将时间戳存储在JS变量中
  • 每n秒调用一次操作,以便比较本地和远程时间戳
  • 使用Ajax将部分表替换为更新的部分表
jQuery附带Rails,可以非常高效地处理Ajax部分。请参阅和以用新内容替换旧内容


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

我将这样处理:

  • 使用Javascript的setInterval函数和jQuery的$.get()函数加载页面,比如/catalog/1/new_items
setInterval(函数(){
$.get(“/catalog/1/new_items.js”),函数(数据){
$(“新项目”).html(数据);
},
“html”)
}, 30000);

  • 创建一个新的_items.js.erb并将其放在app/views/posts文件夹中
new_items.js.erb的内容:

<%= render partial: 'new_items', object: @catalog.new_items.last, as: :item %>

  • 用您喜欢的任何东西创建上面的部分(如果您不需要部分,您可以将div的全部内容写入新的_posts.js.erb文件中)

  • 将最新方法添加到catalog Controller,该方法定义了
    @catalog
    最新.js.erb
    要使用的方法

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


请检查下表。要将表作为部分页面查看并使用它自动更新表yajax,可以使用jQuery的ajax实现。