设置:在我的环境中,Java程序每秒都会连续写入名为readings
的PostgreSQL数据库表。
我正在构建一个连接到同一数据库并显示这些读数的rails应用程序。这是静态显示读数的图片。
问题:要查看新的阅读材料,我必须刷新。
问题:如何使用ActionController :: Live使此页面显示新记录?我想我需要轮询数据库以获取新记录并更新@readings
变量,但我不知道如何。
这是readings_controller.rb
的开头。
class ReadingsController < ApplicationController
include ActionController::Live
before_action :set_reading, only: [:show, :edit, :update, :destroy]
# GET /readings
# GET /readings.json
def index
@search = Reading.search(params[:q])
@readings = @search.result.order('time DESC').paginate(:page => params[:page])
end
答案 0 :(得分:0)
ActionController::Live是自己的野兽
您无法像普通控制器/操作一样使用它 - 它必须与SSE's或web sockets一起使用才能提供连接。我不相信你可以在没有永久连接的情况下让它工作
<强>的ActionController ::活强>
我认为这种方式有效:
我会这样做:
<强> JS 强>
创建一个SSE监听器:
#app/assets/javascripts/special_javascript.js
jQuery(document).ready(function() {
setTimeout(function() {
var source = new EventSource('/your/action');
source.addEventListener('refresh', function(e) {
window.location.reload();
});
}, 1);
});
<强>控制器强>
class ReadingsController < ActionController::Base
include ActionController::Live
def create
response.stream.write "Updated" #-> send updated db stuff
response.stream.close
end
end
这将允许您监视数据库中的更改。如果您希望使用新的数据库信息更新页面,我们将不得不研究如何通过数据传递
实际上,我们强烈推荐一项名为Pusher的服务来为您处理此问题