Rails3の:remote=>trueでファイルをAjax送信する

:remote => trueってありますよね?
簡単にリンクやフォームをAjax化できるRailsの機能なんですが.
例えば,こんな風に使います.*1

= link_to "Ajaxなリンク", root_path, :remote => true

このリンクをクリックすると,root_pathへのリクエストをAjaxで取得*2し,取得した内容を実行します.
ですがこの:remote => trueは,ファイルのアップロードには対応してません.
マルチパートなフォームで,:remote => trueをしてもAjaxな送信になってくれないのです.

これを解決してくれるGemを見つけたので紹介します.
Remotipart:https://github.com/JangoSteve/remotipart
使い方は,READMEと同じですが,まずGemをインストールするためGemfileに記述します.

gem 'remotipart', '~> 1.0'

で,Rails3.1だとapp/assets/javascripts/application.jsあたりに以下を記述します.

//= require jquery.remotipart

そして,ファイルをアップロードするフォームに:remote => trueを追加するだけです.
例:

= form_for :test, :html => {:multipart => true}, :remote => true do |f|
  = f.file_field :file
  = f.submit

これで,Submitボタンを押すとAjaxでファイルアップロードしてくれるはずです.
原理的には,iframeの中に同じフォームを作ってその中で送信しているのかな?*3

*1:Haml使ってます

*2:フォーマはJS

*3:確証はない