1

this gem私は、ブートストラップの進行状況バーと遅延ジョブのgemを一緒に使うことができました。彼の例では、彼は.hamlファイルを使用していますが、私はプロジェクトでerbとcoffeescriptを使用していますので、私は彼が何をしているのか再現しようとしました。Rails Progress Job with coffeescript

これは私のコントローラこれは

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

routes.rbを

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

であり、これは私の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> 

が、これは私がリンクをクリックしたとき、コードが正しく実行さファイル

$(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) 

のCoffeeScriptである、唯一の問題は、どのように私は私のCoffeeScriptに私は私のコントローラで作成されたジョブのIDを伝えることができますアクション? これは私仕事

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 

ある

[EDIT]あなたのすべての

をありがとう、私はいくつかの掘削を行なったし、私の仕事のperfom方法は、(i 'がプットを入れて発射されることはありませんようです私が実行している方法では "lol"と表示されず、コンソールには表示されません)

答えて

1

間隔= setInterval( - >var paramJob = '<%= @ job.to_json%>'; // @jobパラメタR - >

//文字列 "&" +使用 "QUOT;" を代わりSYMの

VAR jobObj = JSON.parse(( '{' + paramJob.slice(paramJob.indexOf( "SYMid" (/ SYM/g、 '"')); //パラメータが処理される

// ajaxで使用するjobObj.id url: '/ progress-job /' + jobObj.id、

希望これはあなたを助けることができます!

0

これはクライアント側とサーバー側の問題です。

サーバー側のレンダリング中にジョブIDをhtmlタグのdata-attributeに配置する必要があります。これはコントローラの動作に基づいて@job変数に格納されていなければなりません。

あなたのページがレンダリングされ、coffeescriptコード(現在はクライアント側)に入っているとします。 You can parse this attribute out and utilize it.