Javascript Rails-如何在添加项目时强制刷新页面

Javascript Rails-如何在添加项目时强制刷新页面,javascript,ruby-on-rails,ruby-on-rails-3,Javascript,Ruby On Rails,Ruby On Rails 3,我正在制作一个简单的rails(3.2.11)演示,只有我可以访问。我有以下资料: 1) 一种叫做食物的食物 2) 一种android设备,可以调用自定义路线/控制器,然后创建新的食物。(食物。创建…) 因此,在我的电脑浏览器上,我加载http://myapp.com,它是rails应用程序的宿主。它立即加载所有食物,因为它正在呈现食物#索引。然而,当我通过安卓设备调用创建新的食物时,浏览器页面(在我的电脑上)仍然显示旧的食物列表,即使数据库知道有新的食物。(因为此时我还没有刷新页面) 当Foo

我正在制作一个简单的rails(3.2.11)演示,只有我可以访问。我有以下资料:

1) 一种叫做食物的食物

2) 一种android设备,可以调用自定义路线/控制器,然后创建新的食物。(
食物。创建…

因此,在我的电脑浏览器上,我加载
http://myapp.com
,它是rails应用程序的宿主。它立即加载所有食物,因为它正在呈现
食物#索引
。然而,当我通过安卓设备调用创建新的
食物时,浏览器页面(在我的电脑上)仍然显示旧的食物列表,即使数据库知道有新的食物。(因为此时我还没有刷新页面)

Food
表的数据库更改时,如何添加“侦听器/观察者”以自动刷新页面?这可能吗

我不是在寻找
,因为我想在整个30分钟的演示中让我的电脑浏览器保持打开状态

=================


另外,我已经三年多没有使用rails了,所以如果您愿意回答,请解释一下,让初学者理解?(首选明确的详细信息)

查看或进行实时开发。还有其他选择,如长轮询。但是,如果您从同一页面添加新食物,您可以轻松捕获该事件并刷新数据。

我建议您查看一下。它有一个非常好的例子,详细介绍了如何准确地设置它。

在过去,一个常见的选择是将数据从服务器推送到客户端。甚至在WebSocket被广泛使用之前,它就已经被使用,但最近它被弃用,取而代之的是HTML5服务器发送事件(SSE)。要使用SSE,请应用客户端侦听器,如下所示:

var source = new EventSource('/stream');
source.addEventListener('message', function(e) {
  console.log('Received a message:', e.data);

  //fetch new data with AJAX, or reload
  location.reload();
});
在服务器端,有许多方法可以发送事件。使用,发送事件的方式如下(摘自文档):

class TimeAction2
def发送最晚时间
data={'time'=>time.now.to_i}.to_json
渲染数据
结束
结束
如果您使用的是Sinatra,则代码如下所示:

get '/stream', :provides => 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
    out.callback { connections.delete(out) }
  end
end
get'/stream',:提供=>'text/event stream'do
溪流:请勿入内|

你愿意更详细地解释一下关系吗?更具体地说,我如何使用rails或js来实现它?@DavidT。网上已经有很多例子了。也许看看吧。
get '/stream', :provides => 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
    out.callback { connections.delete(out) }
  end
end