这似乎是一个微不足道的问题,但我似乎无法在任何地方找到答案(这可能是因为Rails对我正在做的事情不满意)。
我正在使用Sidekiq来处理后台任务(例如图像处理,上传等),还有一个它们已完成我想将当前页面重定向到另一个页面,甚至更好地渲染出局部页面。
我在perform方法中的当前代码如下所示:
def perform(entry_id)
@entry = Entry.find(entry_id)
#Create, upload image, all stored in @file when complete
if @file.save
#render will go here
else
raise @file.inspect
end
end
所以,我尝试了几种方法,例如:
render 'entry/new'
也
render :partial => 'entry/partial'
和
redirect_to @entry, notice: 'File Uploaded'
我甚至试过这个可怕的黑客:
entries_controller.rb
# Called after the background task is completed
def self.done_loading(entry_id)
@entry = Entry.find(entry_id)
@entry.update
end
worker.rb
EntriesController.done_loading(entry_id)
我究竟做错了什么?
参考文献(我抬起头来的东西):When to use render vs redirect_to when handling error validations
对于那些投票的人来说,他的答案至少可以解释为什么他会投票。
此外,如果您想在后台作业完成后重定向/渲染,您可以使用回调,但您应该重新考虑这样做。对于用户,他们将上传图像,但由于您将其发送到后台作业,因此您没有具体的时间框架来确定它们何时执行。如果工作需要2-5分钟来执行怎么办?用户将在5分钟后重定向?
我知道这可能不是你正在寻找的答案,但它比没有解释的投票更好。
此外,如果您正在上传和处理图像,您应该查看
你需要控制器实例深入某些东西,所以你可以:
Thread.current[:controller] = self
Thread.current[:controller].redirect_to
我知道,可怕的是hacky。我没有试过这个,但我们为User.current
做了类似的事情。