首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails使用后台进程应用程序回调来触发事件

Rails使用后台进程应用程序回调来触发事件
EN

Stack Overflow用户
提问于 2014-11-22 00:17:05
回答 1查看 225关注 0票数 1

我有一个应用程序,它使用SuckerPunch gem和Carrierwave Backgrounder在rails应用程序的后台上传和处理图像。因此,当用户创建资产模型的实例时,当图像正在处理时,资产模型中有一个属性attachment_processing?被设置为true。我使用此视图模板向用户指明了这一点

代码语言:javascript
复制
-if instance.send(base_name)
  .form-row
    - if instance.send(base_name).attachment_processing?
      .image_processing
        %span Processing Asset #{proccessing_asset_name(instance.send(base_name))}
        = image_tag("ajax-loader.gif")
    - else    
       = nice_asset(instance.send(base_name),options[:thumb])

当资产完成处理后,该属性被设置为false,并且图像在页面刷新后显示。查看服务器日志,当它完成处理时,它会自动启动。

代码语言:javascript
复制
Started GET "/assets/ajax-loader.gif" for 127.0.0.1 at 2014-11-21 16:10:38 +0000
   (0.2ms)  BEGIN
  SQL (0.4ms)  UPDATE `assets` SET `attachment_processing` = 0, `updated_at` = '2014-11-21 16:11:14' WHERE `assets`.`id` = 6362
   (1.9ms)  COMMIT

有没有办法通过ajax或其他方法,使用它自动显示完成的图像?我只是在寻找一个更用户友好的方法,而不是要求用户刷新页面或类似的东西?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2014-11-22 00:34:18

最简单的方法是每隔几秒钟将页面设置为auto refresh,这将使页面完全刷新,无论是否有更新:

代码语言:javascript
复制
<head>
  <meta http-equiv="refresh" content="30">
</head>

如果您需要更多技巧,您可能希望使用ajax轮询服务器,并在需要时使用javascript刷新页面(或页面的相关部分):

代码语言:javascript
复制
<script>
  $(document).ready(function(){
    setInterval(updateSeats,30000);
 });
  function updateSeats(){
    $.ajax({
    url:  "/flights/<%= @flight.id %>/seats",
    type: "GET",
  }).done(function(data){
    $("#seats").html(data);
  });
  }
</script>

根据手头的用例,您还可以考虑实现更复杂的类似推送的方案,如long polling

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27065772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档