1
我採取一個多形式 - 如圖#217 Multistep Forms - Railscasts - 和整個錯誤傳來:如何避免保存文件,以會議(多步形式CarrierWave文件)
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
的問題是:該文件需要在第一個步驟中更新,因爲我需要閱讀,並得到行數,要在第二個步驟中使用。所以我試圖在會話中存儲文件,並且因爲無法序列化它,所以我收到了這個錯誤。
如何避免這樣做?我相信我應該在第一步上傳文件,然後只是提供它的URL到以下步驟;這是對的嗎?
我該怎麼做?
這正是我試圖避免的那種問題。由於'carrierwave'讓我緩存文件的臨時版本,我相信我讀的文件,並提供臨時路徑接下來的步驟直到最後一個人,哪裏會被上傳。這太危險了嗎? – 2013-04-11 20:40:26
嗯,這是臨時的,我不認爲它的生存是有保證的。所有文件上傳保存在一個臨時文件它們存儲在其最終位置之前,你介意指點我到你的行爲描述'carrierwave' – Leito 2013-04-12 04:08:41
你說得對。儘管我不打算讓未答覆的表單持續比會話更長的時間,但該文件可能會過期。然而,'carrierwave'有一個'store'方法,允許我從保存模型的地方上傳文件;所以我相信這是可能保存模型:) http://carrierwave.rubyforge.org/rdoc/classes/CarrierWave/Uploader/Store.html#M000200 – 2013-04-12 12:41:07