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されたときのことは考えていません…。