带有Paperclip附件的Rails 3中的多步骤表单

时间:2011-05-03 23:01:01

标签: ruby-on-rails-3 forms paperclip formtastic railscasts

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

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

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

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

有什么好办法可以解决这个问题?

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

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

1 个答案:

答案 0 :(得分:1)

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

因此清除附件文件听起来不错,但在我的情况下,使用Attachment#clear清除回形针附件是不够的,因为它仍然想保存一些File

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

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

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

这是一个回形针错误,已在this commit中更正。