2011-05-03 89 views
7

我創建的風格多部分形式,瑞安·貝茨介紹這裏:多步形式回形針附件

http://railscasts.com/episodes/217-multistep-forms
http://asciicasts.com/episodes/217-multistep-forms(基於文本的版本)

要總結一下,我有一個視圖(每個表單步驟有大量的分支),當用戶單擊下一個按鈕並顯示錶單的不同部分時,表單變量將存儲在會話中。

我的一個表單步驟允許用戶通過Paperclip gem上傳幾張圖片。問題在於Rails正在嘗試將圖像數據上傳到會話,該會話正在返回TypeError「無法轉儲文件」。

什麼是一個很好的方式去做這件事?

更新: 我已經試過了一堆寶石(wizardly,acts_as_wizard,和其他一些較小的),但他們都不使用Rails 3

我也嘗試了存儲數據在一個數組中,直到表單完成,但是這導致我的控制器變得巨大而混亂。

回答

1

將模型保存到會話中,除非您想將File保存到會話中。嚮導插件正在使用會話在步驟之間存儲模型。他們不會在我的情況下在有效模型上產生錯誤,而只是在無效的情況下。

所以清理附件聽起來不錯,但在我的情況下清除回形針附件Attachment#clear是不夠的,因爲它仍然想節省一些File

我發現問題是@queued_for_write屬性Attachment仍然包含數據。

所以下面的兩行解決我的問題:

unless @model.valid? 
    @model.image.clear 
    @model.image.queued_for_write.clear 
end 

這是一個曲別針錯誤和this commit已得到糾正。