For an introduction explaining how and why Remotipart works, check out AJAX File Uploads with the iFrame Method and Rails 3 AJAX File Uploads with Remotipart.
Dependencies
- Rails >= 3
- jquery-rails >= 1.0 (which bundles the rails jquery-ujs and the latest jquery)
Installation
Installing is easy. Just add it to your Gemfile:
gem "remotipart", "~> 1.0"
And run:
bundle install
Rails 3.0
For Rails 3.0 apps, run:
bundle exec rails g remotipart:install
This will copy the jquery iframe-transport.js and jquery.remotipart.js files to your public/javascripts directory and add them to your JS :defaults
:
<%= javascript_include_tag :defaults %>
Rails 3.1
For Rails 3.1 apps, the required javascript files will be added to the asset pipeline, no installation script necessary. Simply add this to app/assets/javascripts/application.js (make sure to add them just after //= require jquery_ujs
):
//= require jquery.remotipart
Now you're ready to start uploading files.
Implementation
Your remote forms are now able to upload files via ajax.
In previous versions, it was required to wrap js.erb responses in a remotipart_response block. This is no longer required in v1.0.
Was the form submitted with Remotipart?
In your controllers, views, or helpers, you may want to know if the form was submitted with Remotipart (using the iframe-transport) or submitted with the native rails jquery-ujs, for whatever reason. Remotipart makes a method available called remotipart_submitted?
if remotipart_submitted?
# do one thing
else
# do another
end
Middleware
Remotipart includes a rack middleware that automatically translates the request/response between your app and the iframe-transport when necessary. Because of this, everything just works. no additional configuration needed.
Demo apps and test suite
And that's it! To see it in action, check out the demo Rails app using the remotipart gem for AJAX file uploads in both 3.0 and 3.1 flavors:
The Rails 3.1 demo app also includes a full test suite, using Rspec and Capybara, to test the ajax file uploads. Check out the tests if you're looking for inspiration to write your own.