【问题标题】:How to periodically fetch/update value in rails?如何定期获取/更新rails中的值?
【发布时间】:2015-09-18 01:55:37
【问题描述】:

我们来看一个场景:

counter 10 seconds
  • 用户访问了show.html.erb页面
  • show.html.erb 使用 <%= @post.value %>database 获取值。
  • 计数器已启动,计数器的每次迭代都针对10 seconds
  • 在每个10 seconds 之后,我都想使用utility 类更改@post.value
  • 更新数据库中的@post.value
  • 自动刷新show.html.erb<%= @post.value %>将显示更新后的值
  • 上述过程将循环运行,直到用户移动到其他页面。

如果我必须在代码中简化问题,那么它会是这样的:

查看页面

<%= @post.value %>
<%= @post.name %>

控制器方法

def show
 @post = Post.find(params[:id])
end

def update
....   #It's empty right now
end

def fetching_value_from_PostUpdate(current_value)
 .. # Now I need to update the value in database
end

实用类

我想在这个类中编写的方法的基础上更新post.value。伪代码:

class PostUpdate
 @@instance_variable   

 def initialize(post_value)
   @@instance_variable = Marshal.load(Marshal.dump(post_value))
 end

  #Method required to calculate the value
def update_data_in_database
 ...
return data
end

问题

  • 我必须把柜台放在哪里?客户端还是服务器端?我不想在 rails 中使用 background jobs
  • 我需要在 show 方法中进行哪些更改,以便在每个间隔页面自动刷新并在 @post.value 中传递更新的值?

感谢您的帮助!

【问题讨论】:

  • 我认为,如果您描述您实际尝试做的事情,您可能会得到更好的答案——您是否要添加视图计数器?或者提供某种形式的实时更新?试着从用户的角度来描述它。
  • @AmitPal :问题 2 和 3 令人困惑,您是在考虑其中一个还是两个?如果您每 10 秒定期刷新一次页面,那么使用 ajax 更新特定值是没有意义的。此外,您不能在视图中更新 &lt;%= @post.value %&gt; 的值,您可以更新在页面上呈现该值的 HTML 片段。这就是你想说的吗?我错过了什么吗?
  • @Surya 是的,我正在考虑其中一个或任何更好的方法。是的,您对HTML 渲染是正确的。我没有想到 Ajax 在这种情况下不起作用。最终,我正在寻找一种方法,我可以使用给定的utility 类方法定期(根据conunter)更新post.value,直到用户访问该页面。假设@first visit : counter start 和@post.value = 3 自动刷新页面后更新数据库中的值并在HTML视图中呈现新值等待10秒并继续上述过程

标签: ruby-on-rails ruby ajax ruby-on-rails-4 model-view-controller


【解决方案1】:

我会选择Firebase,而不是轮询服务器。

但是,如果您想定期轮询服务器,我只需要一个 JavaScript 方法,它每 10 秒或您想要的任何时间间隔执行一次,并异步获取您想要的任何数据并随后更新DOM。

另外,ruby wrapper for firebase api,以防万一

【讨论】:

    【解决方案2】:

    我想说最简单的方法是使用ActionController::Live。使用它,您将能够将 SSE(服务器发送事件)发送到您的客户端,同时在那里有 js 脚本来捕获和更新您的&lt;%= @post.value %&gt;。这是一个pretty nice manual 使用它。

    从我的角度来看,实现您想要做的事情的最合适的方法仍然是使用像 Faye 这样的东西。它是一个发布/订阅消息系统,它允许您在新数据出现时立即使用新数据更新您的客户端,例如,您可以在模型中设置 after_save 并向所有订阅的客户端发布更新。当然还有一个 gem 也叫 faye 来包装它的用法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2022-10-08
      • 2018-04-14
      相关资源
      最近更新 更多