singleton can’t be dumped [Rails]

認証して、なおかつファイルをアップロードするときに、以下のようなコードを書いてはいけない。

class ApplicationController < ActionController::Base
  def authenticate
    flash[:request_params] = request.parameters
    unless session[:shop_id]
      @logged_in_shop = nil
      redirect_to :controller => "shop", :action => :login
      false
    else
      @logged_in_shop ||= Shop.find(session[:shop_id])
    end
  end
end

正しくはこうだ。

class ApplicationController < ActionController::Base
  def authenticate
    unless session[:shop_id]
      flash[:request_params] = request.parameters
      @logged_in_shop = nil
      redirect_to :controller => "shop", :action => :login
      false
    else
      @logged_in_shop ||= Shop.find(session[:shop_id])
    end
  end
end

違いがわかるかな?
これをしないと、私のように

singleton can't be dumped

などという意味不明のエラーに1日ほど悩まされます。

原因はおそらく、request.parametersハッシュの値にStringIOオブジェクトが含まれていること。
これをセッションやフラッシュに保存しては、いけない。多分。

(追記)

未認証のときに直接ファイルをPOSTされたときのことは考えていません…。