Ruby on Rails 实时更新

Posted

技术标签:

【中文标题】Ruby on Rails 实时更新【英文标题】:Ruby on rails live update 【发布时间】:2017-07-19 17:50:39 【问题描述】:

好的,我正在寻找一种让 ajax 脚本在页面后台运行并查看数据库中是否有新记录以及是否有抓取该记录并将其显示在我的页面。

我也不想使用插件,我宁愿自己做,因为我更喜欢学习如何做,如果我将来需要它来做不同的事情,更容易做出改变

我对 ajax 和 ruby​​ on rails 还很陌生,所以需要解释一下

这是我的控制器,当我用户更新它更改的内容而不刷新页面但我想要它也获取新数据时

    class NotificationsController < ApplicationController

  # GET /notifications
  # GET /notifications.json
  def index
    @notifications = Notification.all
  end

def show
  end

def update 
  @notification = Notification.find(params[:id])
  @notification.update_attributes(:content => params[:content][:content])
  respond_to do |format|
    format.html  redirect_to notifications_path 
    format.json  render json: @notification
  end
end
end

这是js文件

$(document).ready(function()
    $('input[type=submit]').on('click', function(event)

        var form = $(this).parent('form');
        event.preventDefault();

        $.ajax(
            type:"POST",
            url: form.attr('action'),
            data: form.serialize(),
            success: function(data)
            console.log('this worked')
            $('#'+ data.id).html(data.content)

                        ,
            error: function(data)
                console.log('failed')
            ,
            dataType: 'JSON'
        );
        );
    );

这是我的html文件

<% content_for :titleheader do %>
NOTIFICATIONS
<% end %>

<h1>Listing Notifications</h1>

    <% @notifications.each do |notification| %>
    <%= form_for notification do |f| %>

    <%= notification.id %>
    <div id="<%= notification.id %>"><%=notification.content %></div>
    <%= notification.read %>

<%= text_field "content", "content" %>
    <%= f.submit "change status" %>
<% end %>
<% end %>

如您所知,我还没有进行创建操作,因为我不确定是否必须通过 ajax 或其他方式来执行此操作

非常感谢您的帮助

【问题讨论】:

这是一个不好的问题还是没有人知道答案? 【参考方案1】:

是的,您需要通过 AJAX 使用称为轮询的过程来执行此操作。不幸的是,如果您不想使用任何额外的 gem 或插件,那么这是唯一的“简单”解决方案。轮询是脚本定期检查服务器的更新。

setInterval(function() ajax_check_and_apply_updates_function(); , 10000);

将运行您的 ajax 以每 10 秒检查一次更新。

如果您愿意接受 gems,可以使用 Faye 或 Pusher 来实现异步。

如果有人知道一种仅使用 ruby​​ on rails 和 AJAX 进行异步的方法,我真的希望他们告诉我们,因为那太棒了。

【讨论】:

以上是关于Ruby on Rails 实时更新的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:视图更改后,网站未更新

Ruby on Rails 无需密码即可更新用户属性

Ruby on Rails 实时活动通知

Ruby on rails - 更新 ajax 的 PUT 方法

对链接进行 ajax 调用单击以更新链接本身(Ruby on Rails)

在 AJAX 更新 Ruby on Rails 6 后,语义 UI 模式不会重新打开