1

J'ai trouvé this gem pour utiliser ensemble la barre de progression bootstrap et la gemme retardée. Dans son exemple, il utilise le fichier .haml, mais j'utilise erb et coffeescript dans mon projet, j'ai donc essayé de reproduire ce qu'il fait.Rails Progress Job avec CoffeeScript

Ceci est mon contrôleur

def export 
    @job = Delayed::Job.enqueue StandingsJob.new 
end 

c'est routes.rb

get 'export', to: 'scraper#export' 

et voici mon home.erb.html

<%= link_to 'export', export_path, {id:'mario', remote: true} %> 

<div class="progress"> 
    <div class="progress-bar progress-bar-striped active" role="progressbar" 
     aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%"> 
    0% 
    </div> 
</div> 

et ceci est mon coffeescript fichier

$(document).on "turbolinks:load", -> 
    $('#mario').on 'click', -> 
     alert('hocliccatoooo') 
     interval = setInterval(-> 
     $.ajax(
      url: '/progress-job/' **** What should I add here?????****, 
      success: (job) -> 
      console.log('loool') 
      stage 
      progress 
      if job.last_error != null 
       $('.progress-status').addClass('text-danger').text(job.progress_stage); 
       $('.progress-bar').addClass('progress-bar-danger'); 
       $('.progress').removeClass('active'); 
       clearInterval(interval); 

      if job.progress_stage != null 
       stage = job.progress_stage 
       progress = job.progress_current/job.progress_max * 100 
      else 
       progress = 0 
       stage = 'Uploading file?' 

      if progress != 0 
       $('.progress-bar').css('width', progress + '%').text(progress + '%') 
      $('.progress-status').text(stage); 
      error: -> 
      alert('errore') 
      $('.progress').removeClass('active'); 
      $('.progress-bar').css('width', '100%').text('100%'); 
      $('.progress-status').text('Finito!!!'); 
      clearInterval(interval); 

     ) 
     , 100) 

Le code fonctionne correctement lorsque je clique sur le lien, le seul problème est, comment puis-je dire à mon coffeescript l'identifiant du travail que j'ai créé dans mon contrôleur action? Merci à tous

[EDIT]

Ceci est mon emploi

class StandingsJob < ProgressJob::Base 

    def perform 
    update_stage 'Faccio cose' 
    update_progress_max 10 
    for i in [0..10] 
     sleep(2) 
     update_progress 
    end 
    end 
end 

Je l'ai fait quelques recherches et il semble que la méthode perfom de mon travail est jamais tiré (je mets un puts ' lol » dans ma méthode et j'exécuter ne vois jamais dans la console)

Répondre

1

intervalle = setInterval (-> var paramJob = '<% = @ job.to_json%>'; // get @job paramete r ->

// utiliser la chaîne "&" + "quot;" au lieu de SYM

var = jobObj JSON.parse (('{' + paramJob.slice (paramJob.indexOf ("SYMid"), paramJob.length)). replace (/ SYM/g, '"')); // Les paramètres sont traités

// dans l'ajax use jobObj.id url: '/ progress-job /' + jobObj.id,

espérons que cela peut vous aider!

0

Il s'agit d'un problème côté client et côté serveur.

Vous devez placer l'ID de travail dans un data-attribute sur la balise html lors du rendu côté serveur. Il devrait être dans la variable @job en fonction de votre action de contrôleur.

Une fois que votre page est rendue et que vous êtes dans le code café (maintenant côté client). You can parse this attribute out and utilize it.