7

我正在以 Ryan Bates 在这里描述的风格创建一个多部分表单:

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

总而言之,我有一个视图(每个表单步骤都有一堆部分),当用户单击下一步按钮并显示表单的不同部分时,表单变量存储在会话中。

我的表单步骤之一允许用户通过 Paperclip gem 上传多张图像。问题在于 Rails 正在尝试将图像数据上传到会话,该会话返回 TypeError“无法转储文件”。

什么是解决这个问题的好方法?

更新:我已经尝试了一堆宝石(wizardly、acts_as_wizard 和其他一些较小的宝石),但它们似乎都不适用于 Rails 3。

我也尝试将数据存储在一个数组中,直到表单完成,但这导致我的控制器变得庞大而混乱。

4

1 回答 1

1

除非您想将模型保存到会话中,否则将模型保存File到会话中。向导插件使用会话在步骤之间存储模型。在我的情况下,它们不会在有效模型上产生错误,只是在无效模型上。

所以清除附件听起来是个好主意,但在我的情况下,清除回形针附件Attachment#clear是不够的,因为它仍然想保存一些File.

我发现问题出在仍然包含数据的@queued_for_write属性上。Attachment

所以以下两行解决了我的问题:

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

这是一个回形针错误,并在此提交中得到纠正。

于 2011-11-10T11:55:16.743 回答