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