>我有一个带有文件字段的经典 rails 3 表单,一切正常,上传工作正常,数据保存到数据库。
当验证失败时,例如,缺少标题,则用户将发送回表单,并带有render :action => new
。正常。但这里的问题是,用户必须选择另一个时间其文件。
有什么办法可以避免这种情况吗?
在运行验证之前,您不希望处理文件,或者要重复存储可能没有关联记录的文件。像回形针和attachment_fu这样的宝石就是这样做的。
如果您希望在文件第一次提交时存储文件并且有效,则可以存储文件,然后在视图中快速检查它是否已为您为其构建表单的对象设置,例如:
<% unless foo.attachment? %>
# file field
<% end %>
有意义?
你不能。这是安全问题。
您可以在某些浏览器中破解它,但通常您无法做到
这个问题已经过时了,但是现在当验证失败时,carrierwave gem 有一些东西可以保留文件字段。
https://github.com/carrierwaveuploader/carrierwave#making-uploads-work-across-form-redisplays
基本上,如果您的模型在头像文件上安装了上传器,则必须添加hidden_field avatar_cache。您必须将其添加到控制器中的许可列表中(以便 Rails 不会限制将字段提交到服务器)