<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Progress Bar in Rails | Infinum</title>
		<atom:link href="https://infinum.com/blog/progress-bar-in-rails/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/progress-bar-in-rails/</link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 17 Apr 2026 13:59:15 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>7881https://infinum.com/uploads/2015/07/progress-bar-in-rails-0.webp</url>
				</image>
				<title>Progress Bar in Rails</title>
				<link>https://infinum.com/blog/progress-bar-in-rails/</link>
				<pubDate>Thu, 22 Jan 2015 09:05:00 +0000</pubDate>
				<dc:creator>Stjepan Hadjić</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/progress-bar-in-rails/</guid>
				<description>
					<![CDATA[<p>Ever needed a progress bar for some long-running task in your Rails application? We created a progress&#095;job gem that helps with that problem.</p>
<p>The post <a href="https://infinum.com/blog/progress-bar-in-rails/">Progress Bar in Rails</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-153"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	Ever needed a progress bar for some long-running task in your Rails application? You searched Google and couldn’t find anything that easily integrates with Rails? Well, we created a progress_job gem that helps with that problem.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	<a href="https://github.com/d4be4st/progress_job">Progress_job</a> is a gem that builds upon <a href="https://github.com/collectiveidea/delayed_job">delayed_job</a> to give you a simple progress bar you can use in your views. Create a class with your long-running task inside, update the job in each iteration and have ajax calls that will update the progress bar.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-99"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-100">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2015/07/progress-bar-in-rails-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="674"
															width="1024"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-102">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-103'
	>
	ProgressJob</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	Progress_job depends on delayed_job, so I will write this tutorial using the <a href="https://github.com/collectiveidea/delayed_job_active_record">delayed_job_active_record</a> gem.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-108">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-109'
	>
	After adding the gem in your Gemfile</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-112"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-ruby github-light" data-language="ruby" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">  gem ’delayed_job_active_record’
</span></span><span class="line"><span class="token">  gem ’progress_job’
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-115"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-113">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-114'
	>
	and running bundle install,</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-117"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">$</span><span class="token"> </span><span class="token" style="color: #032f62;">bundle</span><span class="token"> </span><span class="token" style="color: #032f62;">install</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-120"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-118">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-119'
	>
	run the progress_job generator to add migrations necessary for progress_job to work.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">$</span><span class="token"> </span><span class="token" style="color: #032f62;">rails</span><span class="token"> </span><span class="token" style="color: #032f62;">generate</span><span class="token"> </span><span class="token" style="color: #032f62;">delayed_job:active_record</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">$</span><span class="token"> </span><span class="token" style="color: #032f62;">rails</span><span class="token"> </span><span class="token" style="color: #032f62;">generate</span><span class="token"> </span><span class="token" style="color: #032f62;">progress_job:install</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">$</span><span class="token"> </span><span class="token" style="color: #032f62;">rake</span><span class="token"> </span><span class="token" style="color: #032f62;">db:migrate</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-123">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-124'
	>
	This will add three columns to the delayed_jobs table:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-126">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-127'
	>
	<li>progress_stage : string =&gt; customizable description for the current progress stage of the task</li><li>progress_current : integer =&gt; number representing the current progress value of the task</li><li>progress_max : integer =&gt; number representing the maximum progress value of the task</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-129">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-130'
	>
	Then you can create a custom class extending ProgressJob::Base which will give you access to some handy methods for manipulating the job.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-ruby github-light" data-language="ruby" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">update_progress</span><span class="token">(</span><span class="token" style="color: #005cc5;">step</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">10</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> increase the progress_current for step</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">update_stage</span><span class="token">(</span><span class="token">’name of stage’</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> change the progress_stage</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">update_stage_progress</span><span class="token">(</span><span class="token">’name of stage’</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">s</span><span class="token" style="color: #005cc5;">tep:</span><span class="token"> </span><span class="token" style="color: #005cc5;">11</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> change progress_stage and increase progress_current for step</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">update_progress_max</span><span class="token">(</span><span class="token">progress_max</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> change progress_max</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-136"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-134">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-135'
	>
	Progress_job also gives you a route from which you can get all the info on a progress_job, and it is located at:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-138"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token"> 
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #005cc5;">GET</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">progress</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">jobs</span><span class="token" style="color: #d73a49;">/</span><span class="token">:</span><span class="token" style="color: #005cc5;">job_id</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-141"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-139">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-140'
	>
	Now all you need is an ajax call which will check the route every few seconds and update the progress bar visible on the screen.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-144"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-142">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-143'
	>
	Demo app</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-147"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-145">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-146'
	>
	I’ve created a demo app. You can view its <a href="https://github.com/d4be4st/progress_job_demo">source</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-149"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-ruby github-light" data-language="ruby" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> app/jobs/export.rb</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #d73a49;">class</span><span class="token"> </span><span class="token" style="color: #6f42c1;">ExportJob</span><span class="token"> </span><span class="token">&lt;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">ProgressJob</span><span class="token" style="color: #6f42c1;">::</span><span class="token" style="color: #6f42c1;">Base</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">def</span><span class="token"> </span><span class="token" style="color: #6f42c1;">initialize</span><span class="token">(</span><span class="token">users</span><span class="token">,</span><span class="token"> </span><span class="token">progress_max</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">super</span><span class="token"> </span><span class="token" style="color: #005cc5;">progress_max</span><span class="token" style="color: #005cc5;">:</span><span class="token"> progress_max
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">@</span><span class="token" style="color: #24292e;">users</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> users
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">def</span><span class="token"> </span><span class="token" style="color: #6f42c1;">perform</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">update_stage</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #005cc5;">Exporting</span><span class="token"> users’</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #e36209;">csv_string</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">CSV</span><span class="token">.</span><span class="token" style="color: #6f42c1;">generate</span><span class="token"> </span><span class="token" style="color: #d73a49;">do</span><span class="token"> </span><span class="token" style="color: #d73a49;">|</span><span class="token">csv</span><span class="token" style="color: #d73a49;">|</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #24292e;">@</span><span class="token" style="color: #24292e;">users</span><span class="token">.</span><span class="token" style="color: #6f42c1;">each</span><span class="token"> </span><span class="token" style="color: #d73a49;">do</span><span class="token"> </span><span class="token" style="color: #d73a49;">|</span><span class="token">user</span><span class="token" style="color: #d73a49;">|</span><span class="token">
</span></span><span class="line"><span class="token">        csv </span><span class="token" style="color: #d73a49;">&lt;&lt;</span><span class="token"> user</span><span class="token">.</span><span class="token" style="color: #6f42c1;">to_csv</span><span class="token">
</span></span><span class="line"><span class="token">        update_progress
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">File</span><span class="token">.</span><span class="token" style="color: #005cc5;">open</span><span class="token">(</span><span class="token">’path</span><span class="token" style="color: #d73a49;">/</span><span class="token">to</span><span class="token" style="color: #d73a49;">/</span><span class="token">export</span><span class="token">.</span><span class="token" style="color: #6f42c1;">csv</span><span class="token">’</span><span class="token">,</span><span class="token"> ’w’</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #d73a49;">|</span><span class="token">f</span><span class="token" style="color: #d73a49;">|</span><span class="token"> f</span><span class="token">.</span><span class="token" style="color: #6f42c1;">write</span><span class="token">(</span><span class="token">csv_string</span><span class="token">)</span><span class="token"> </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> app/controllers/exports_controller.rb</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #d73a49;">class</span><span class="token"> </span><span class="token" style="color: #6f42c1;">ExportsController</span><span class="token"> </span><span class="token">&lt;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">ApplicationController</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">def</span><span class="token"> </span><span class="token" style="color: #6f42c1;">index</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">def</span><span class="token"> </span><span class="token" style="color: #6f42c1;">export_users</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #e36209;">users</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">User</span><span class="token">.</span><span class="token" style="color: #6f42c1;">first</span><span class="token">(</span><span class="token" style="color: #005cc5;">100</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">@</span><span class="token" style="color: #24292e;">job</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">Delayed</span><span class="token">::</span><span class="token" style="color: #005cc5;">Job</span><span class="token">.</span><span class="token" style="color: #6f42c1;">enqueue</span><span class="token"> </span><span class="token" style="color: #005cc5;">ExportJob</span><span class="token">.</span><span class="token" style="color: #d73a49;">new</span><span class="token">(</span><span class="token">users</span><span class="token">,</span><span class="token"> users</span><span class="token">.</span><span class="token" style="color: #6f42c1;">count</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> app/views/exports/index.html.haml</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">.</span><span class="token">export
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">=</span><span class="token"> link_to ’</span><span class="token" style="color: #005cc5;">Export</span><span class="token"> </span><span class="token" style="color: #005cc5;">Users</span><span class="token">’</span><span class="token">,</span><span class="token"> export_users_path</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">re</span><span class="token" style="color: #005cc5;">m</span><span class="token" style="color: #005cc5;">ote:</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">c</span><span class="token" style="color: #005cc5;">l</span><span class="token" style="color: #005cc5;">ass:</span><span class="token"> ’btn btn</span><span class="token" style="color: #d73a49;">-</span><span class="token">primary btn</span><span class="token" style="color: #d73a49;">-</span><span class="token">lg’
</span></span><span class="line"><span class="token">  </span><span class="token">.</span><span class="token" style="color: #6f42c1;">well</span><span class="token">{</span><span class="token" style="color: #005cc5;">style</span><span class="token" style="color: #005cc5;">:</span><span class="token"> ’</span><span class="token" style="color: #005cc5;">displ</span><span class="token" style="color: #005cc5;">a</span><span class="token" style="color: #005cc5;">y:</span><span class="token">none’</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">.</span><span class="token" style="color: #6f42c1;">row</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">.</span><span class="token" style="color: #6f42c1;">col</span><span class="token" style="color: #d73a49;">-</span><span class="token">xs</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">12</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">.</span><span class="token" style="color: #6f42c1;">progress</span><span class="token" style="color: #d73a49;">-</span><span class="token">status</span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token" style="color: #d73a49;">-</span><span class="token">primary
</span></span><span class="line"><span class="token">    </span><span class="token">.</span><span class="token" style="color: #6f42c1;">row</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">.</span><span class="token" style="color: #6f42c1;">col</span><span class="token" style="color: #d73a49;">-</span><span class="token">xs</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">12</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">.</span><span class="token" style="color: #6f42c1;">progress</span><span class="token">.</span><span class="token" style="color: #6f42c1;">progress</span><span class="token" style="color: #d73a49;">-</span><span class="token">striped</span><span class="token">.</span><span class="token" style="color: #6f42c1;">active</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">.</span><span class="token" style="color: #6f42c1;">progress</span><span class="token" style="color: #d73a49;">-</span><span class="token">bar
</span></span><span class="line"><span class="token">            </span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token" style="color: #d73a49;">-</span><span class="token">primary
</span></span><span class="line"><span class="token">              </span><span class="token" style="color: #005cc5;">0</span><span class="token" style="color: #d73a49;">%</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">=</span><span class="token"> link_to ’</span><span class="token" style="color: #005cc5;">View</span><span class="token"> csv’</span><span class="token">,</span><span class="token"> ’</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">system</span><span class="token" style="color: #d73a49;">/</span><span class="token">export</span><span class="token">.</span><span class="token" style="color: #6f42c1;">csv</span><span class="token">’</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">c</span><span class="token" style="color: #005cc5;">lass:</span><span class="token"> ’btn btn</span><span class="token" style="color: #d73a49;">-</span><span class="token">success export</span><span class="token" style="color: #d73a49;">-</span><span class="token">link’</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">sty</span><span class="token" style="color: #005cc5;">l</span><span class="token" style="color: #005cc5;">e:</span><span class="token"> ’</span><span class="token" style="color: #005cc5;">d</span><span class="token" style="color: #005cc5;">isplay:</span><span class="token">none’
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> config/routes.rb</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">Rails</span><span class="token">.</span><span class="token" style="color: #6f42c1;">application</span><span class="token">.</span><span class="token" style="color: #6f42c1;">routes</span><span class="token">.</span><span class="token" style="color: #6f42c1;">draw</span><span class="token"> </span><span class="token" style="color: #d73a49;">do</span><span class="token">
</span></span><span class="line"><span class="token">  root </span><span class="token" style="color: #005cc5;">to</span><span class="token" style="color: #005cc5;">:</span><span class="token"> ’exports</span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;">index’</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token">  get ’export_users’ </span><span class="token">=&gt;</span><span class="token"> ’exports</span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;">export_users’, as: :export_users</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #d73a49;">end</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> app/views/exports/export_users.js.haml</span><span class="token">
</span></span><span class="line"><span class="token">:</span><span class="token" style="color: #24292e;">plain</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">var</span><span class="token"> </span><span class="token" style="color: #24292e;">interval</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token">.expor</span><span class="token">t</span><span class="token"> </span><span class="token" style="color: #24292e;">.wel</span><span class="token">l</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">show</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #24292e;">interval</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">setInterval</span><span class="token">(</span><span class="token" style="color: #d73a49;">function</span><span class="token">(</span><span class="token">)</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">$</span><span class="token">.</span><span class="token" style="color: #6f42c1;">ajax</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">url</span><span class="token">:</span><span class="token"> ’</span><span class="token" style="color: #032f62;">/</span><span class="token" style="color: #032f62;">progress-job</span><span class="token" style="color: #032f62;">/</span><span class="token">’ </span><span class="token" style="color: #d73a49;">+</span><span class="token"> #</span><span class="token">{</span><span class="token">@job.</span><span class="token" style="color: #24292e;">id</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6f42c1;">success</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token">(</span><span class="token" style="color: #e36209;">job</span><span class="token">)</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">var</span><span class="token"> </span><span class="token" style="color: #24292e;">stage</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">progress</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> If there are errors</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">if</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #24292e;">job</span><span class="token">.</span><span class="token" style="color: #24292e;">last_error</span><span class="token"> </span><span class="token" style="color: #d73a49;">!=</span><span class="token"> </span><span class="token" style="color: #005cc5;">null</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">status</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">addClass</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">text</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">danger</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token">(</span><span class="token" style="color: #24292e;">job</span><span class="token" style="color: #24292e;">.progress_stag</span><span class="token">e</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">bar</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">addClass</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">progress</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">bar</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">danger</span><span class="token">’</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">removeClass</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">active</span><span class="token">’</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6f42c1;">clearInterval</span><span class="token">(</span><span class="token" style="color: #24292e;">interval</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #24292e;">progress</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #24292e;">job</span><span class="token">.</span><span class="token" style="color: #24292e;">progress_current</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token"> </span><span class="token" style="color: #24292e;">job</span><span class="token">.</span><span class="token" style="color: #24292e;">progress_max</span><span class="token"> </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">100</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> In job stage</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">if</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #24292e;">progress</span><span class="token">.</span><span class="token" style="color: #6f42c1;">toString</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">!==</span><span class="token"> ’</span><span class="token" style="color: #005cc5;">NaN</span><span class="token">’</span><span class="token">)</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">status</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token">(</span><span class="token" style="color: #24292e;">job</span><span class="token" style="color: #24292e;">.progress_curren</span><span class="token">t</span><span class="token"> </span><span class="token" style="color: #d73a49;">+</span><span class="token"> ’</span><span class="token" style="color: #d73a49;">/</span><span class="token">’ </span><span class="token" style="color: #d73a49;">+</span><span class="token"> </span><span class="token" style="color: #24292e;">job</span><span class="token" style="color: #24292e;">.progress_ma</span><span class="token">x</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">bar</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">css</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">width</span><span class="token">’</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">progress</span><span class="token"> </span><span class="token" style="color: #d73a49;">+</span><span class="token"> ’</span><span class="token" style="color: #d73a49;">%</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token">(</span><span class="token" style="color: #24292e;">progress</span><span class="token"> </span><span class="token" style="color: #d73a49;">+</span><span class="token"> ’</span><span class="token" style="color: #d73a49;">%</span><span class="token">’</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6f42c1;">error</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token">(</span><span class="token">)</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Job is no loger in database which means it finished successfuly</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">removeClass</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">active</span><span class="token">’</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">bar</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">css</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">width</span><span class="token">’</span><span class="token">,</span><span class="token"> ’</span><span class="token" style="color: #005cc5;">100</span><span class="token" style="color: #d73a49;">%</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #005cc5;">100</span><span class="token" style="color: #d73a49;">%</span><span class="token">’</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.progres</span><span class="token">s</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">status</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">text</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">Successfully</span><span class="token"> </span><span class="token" style="color: #24292e;">exported</span><span class="token" style="color: #d73a49;">!</span><span class="token">’</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">$</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">.expor</span><span class="token">t</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">link</span><span class="token">’</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">show</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">clearInterval</span><span class="token">(</span><span class="token" style="color: #24292e;">interval</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token" style="color: #005cc5;">100</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/progress-bar-in-rails/">Progress Bar in Rails</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>