Rails实时数据库查询选框/自动收报机

时间:2015-04-21 17:19:50

标签: javascript jquery mysql ruby-on-rails real-time

美好的一天,

我想为我的rails应用程序创建一个实时的Newsticker / Marquee滚动条,类似于你在天空体育新闻电视频道上找到的。

我需要能够查询数据库表(我可以)并在一个表行中显示输出,一次循环它。此外,我想尝试实时或非常频繁地显示此查询并更新客户端上的输出而不刷新页面。 (类似于聊天室或推特提要。)

这是一些基本代码

简单查询如果开始时间<1,则显示主题和纸张。当前时间和停止时间是>当前时间

模型

 Timetable.where("start < ? AND stop > ?", Time.now, Time.now).order('id ASC').pluck(:subject, :paper)

HTML

<table><tbody><% @timetables.each do |timetable| %><tr><td><%= timetable[0] %></td><td>%= timetable[1] %></td></tr><% end %></tbody></table>

如果有人能够指出或指出我正确的方向,我真的很感激。感谢

目前我可能会使用partial来显示查询并更新部分,不确定是否有更好的方法使用任何可以打开事件监听器或套接字的gem?

1 个答案:

答案 0 :(得分:1)

你来这里有趣的问题。让我兴奋,我自己尝试了一些东西!

如果要在客户端刷新内容(无页面重新加载),则需要使用javascript重复查询服务器。在Rails中,您可能会从在AJAX调用中使用的页面视图和API视图中呈现部分内容。

假设您有一个名为Item的模型,您希望在该模型中显示页面上的最新3,然后每5秒获取一次更新以更新页面。您可能想要创建如下所示的内容:

控制器/ content_controller.rb

class ContentController < ApplicationController
  def show
  end
end

视图/内容/ show.haml

%h1 Page with updated items

.updateme
  = render "items/latest"

控制器/ items_controller.rb

class ItemsController < ApplicationController
  layout false

  def index
  end
end

视图/项目/ index.haml

= render "items/latest"

视图/项目/ _latest.haml

- Item.last(3).each do |item|
  = item.subject

最后但并非最不重要的是,您需要添加调用项目索引的javascript

Javascript角/ update.js

function updateItems() {
  $.ajax({
    url: "/items",
  }).done(function(data) {
    $("div.updateme").html(data)
  });
}

$( document ).ready(function() {
  window.setInterval(function(){
    updateItems();
  }, 5000);
});

希望这能让你开始朝着正确的方向前进:)