file_columnを使ってアップロードされたファイルを削除すると, marshal_dumpがどうとか言われる

Railsでファイルをアップロードする際によく使われているfile_columnプラグイン. 便利なんですが, とある条件でいやーなエラーが発生するみたいです.

その条件は"file_columnを使ったモデルをセッションに格納"し, その状態で"アップロードしたファイルを削除"すると, です. 発生するエラー(例外)は以下のとおり(TypeError).

no marshal_dump is defined for class Proc

どうやらセッションの内容をシリアライズする際, どこかにProcクラスのインスタンスが紛れ込んでいるらしい. そのせいで"Marshal.dumpでシリアライズできないよ"と言われています. 問題が発生している箇所がフレームワークなので, ブラウザで見ると500(サーバーエラー)となります.

原因はfile_columnプラグインのFileColumn::BaseUploadedFile#after_save.

# script/plugin installでインストールした状態で
# /vendor/plugins/file_column/lib/file_column.rb 98行目辺り
def after_save
  @on_save.each { |blk| blk.call } if @on_save
  self
end

@on_saveがくせ者なので, 下記のようにして@on_saveを取り除いてやればOKでした.

def after_save
  if @on_save
    @on_save.each { |blk| blk.call }
    remove_instance_variable :@on_save
  end

  self
end

にしても, file_columnプラグインがガンというコトに気づくのに時間喰った. あとあまりこの不具合を目にしないというコトは, セッションにモデルのインスタンスを格納するコト自体一般的でない?