我的工作很长时间,需要从Internet上抓取信息(大约2分钟),并且在使用我抓取的数据的新(附加)实例更新页面/视图时遇到了麻烦。
我认为使用回调(在创建/更新时)可能是可行的,但是我收到一条错误消息,指出我重定向了太多次,所以我认为我很可能需要一些ajax和/或回调组合才能实现页面的持续更新。当用户创建帖子或评论时,我不熟悉使用ajax来更新页面的一部分,但是我不确定如何通过后台作业来执行此操作。 我短暂地使用了ActionCable(只是打开一个通道并以某种方式通过该通道流传输数据),但是没有一种更简单的方法来根据数据库的更改来实质上更新页面吗? 我当前的解决方案是简单地用js重新加载页面一段时间,但这看起来简直太原始了。
控制器
.entry-content table {
table-layout: unset !important;
}
.entry-content th, .entry-content td {
word-break: break-word;
min-width: 50px;
}
搜索模型
def create
@search = Search.new(search_params)
if @search.save
PreRunAllJob.perform_later(@search.title, @search.id)
respond_to do |format|
format.html { redirect_to search_path(@search) }
format.js # currently empty
end
else
render :new
end
end
def show
@search = Search.find(params[:id])
@jobs = Job.where(search_id: @search.id).order(quality: :desc)
end
工作模型
class Search < ApplicationRecord
has_many :jobs
end
searches / show.html.erb
class Job < ApplicationRecord
belongs_to :search
end
_jobs.html.erb
<div class="container">
<%= render "jobs", remote: true %>
</div>
因此,请快速总结一下:长期运行的后台作业会创建一个“搜索”实例,其中包含许多“作业”实例。我在searchs / show.html.erb上显示卡片,每个卡片都包含一个“ Job”实例的信息。搜索正在进行时,我想相应地更新视图(例如,点按)。 我可以/应该在这里走什么路?纯净的ajax?回调?