1

#217 マルチステップ フォーム - Railscastsに示すように、マルチステップ フォームを実装していますが、エラーが発生しました。

can't dump File

アクションは次のとおりnewです。create

def new
  session[:batch_params] ||= {}
  @batch = current_user.batches.build

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @batch }
  end
end

def create
  session[:batch_params].deep_merge!(params[:batch]) if params[:batch]
  @batch = current_user.batches.build(session[:batch_params])

  if @uploaded
    @batch.file = @uploaded
  end

  @batch.current_step = session[:batch_step]

  if params[:back_button]
    @batch.previous_step
  elsif @batch.last_step?
    @batch.file = session[:file]
    @batch.save
  else
    @batch.next_step
  end
  session[:batch_step] = @batch.current_step

  if @batch.new_record?
    render 'new'
  else
    session[:batch_step] = session[:batch_params] = nil
    flash[:notice] = "Batch was successfully created"
    redirect_to @batch
  end
end

問題は、ファイルを読み取って行数を取得し、2 番目のステップで使用する必要があるため、最初のステップでファイルを更新する必要があることです。そのため、ファイルをセッションに保存しようとしていますが、シリアル化できないため、このエラーが発生しています。

どうすればこれを回避できますか?最初のステップでファイルをアップロードし、次のステップにその URL を提供するだけでよいと思います。それが正しいか?

これどうやってするの?

4

1 に答える 1

1

最初のフォームでレコードを作成し、ステート マシンを使用して、最後のフォームでオブジェクトを完全に構築するまでオブジェクトのステップを追跡することをお勧めします。のような宝石state_machineを使用すると、ステップごとに検証を行うことができます。唯一の問題は、完了していない提出物で終了する可能性があることです。これを定期的にクリーンアップすることができます。

于 2013-04-11T20:12:44.097 に答える