【发布时间】:2016-01-15 16:30:40
【问题描述】:
我希望创建一个在从后端数据库收集选定资源后异步呈现部分的作业。我这样做是因为我获取的数据需要很长时间才能获取,并且我希望能够在收到数据后显示这些数据。现在我的代码看起来像这样:
class CommentsJob < ApplicationJob
queue_as: default
def perform(commenter_company)
@comments = Comment.where(company: commenter_company)
@html = CommentsController.render partial: "comments", assigns {comments: @comments }
end
end
我已经设置了 _cmets.html.erb 部分。我还将队列适配器设置为异步,因此该作业确实在后台运行并在页面加载后完成。
我成功地获取了 html 并将其设置为作业中的 @html 实例变量。
我的问题是:我怎样才能将这个@html 内容放到已经呈现的页面上?这可以在工作中完成,还是我需要使用 ActionCable/websockets 来做到这一点?提前致谢!
【问题讨论】:
-
这似乎是你应该使用 javascript 的东西。我很肯定会展示你需要硬刷新或某种类型的 JS 的部分内容。
-
你必须实现一些缓存。您正在尝试做的是预热缓存。查看使用滑轨缓存俄罗斯娃娃
-
谢谢大家。一旦数据在 ruby 中可用,我宁愿不必进行刷新和显示数据,但我知道无法按照我设置的方式推送到客户端。另外,如果不刷新页面,使用缓存是否不起作用?
-
我在几周前实现了这个。只需使用 ActionCable 将数据推送回客户端即可。
标签: ruby-on-rails websocket rails-activejob ruby-on-rails-5 actioncable