【发布时间】: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 更新特定值是没有意义的。此外,您不能在视图中更新
<%= @post.value %>的值,您可以更新在页面上呈现该值的 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