我正在实施一个多步骤表单 - 如#217 Multistep Forms - 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
问题是:文件需要在第一步中更新,因为我需要读取它并获取行数,以便在第二步中使用。所以我试图在会话中存储一个文件,因为它不可能序列化它,我收到了这个错误。
怎么可以避免这样做?我相信我应该在第一步上传文件,然后只提供以下步骤的网址;这是对的吗?
我该怎么做?
答案 0 :(得分:1)
我建议您在第一个表单上创建记录,并使用状态机跟踪对象的步骤,直到在最后一个表单上完全构建它为止。像state_machine
这样的宝石将允许您按步骤进行验证。唯一的问题是你可能(将)以未完成的提交结束。你可以定期清理它。