微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用回形针在轨道中创建对象时上传AJAX文件

如何解决使用回形针在轨道中创建对象时上传AJAX文件

| 我有一个头疼的问题,我似乎找不到一个简单的解决方案。 我有几个属于用户的模型,每个模型都有一个图像附件。我做了一个非常不错的ajax文件上传和图像裁剪表格,但是有一个问题。当我编辑数据库中已有的对象时,一切工作正常,但是当我创建新对象时上传文件时,一切都没有。问题是,要能够上载和保存图像,对象必须已经在数据库中。我已经找到了解决此问题的两种可能的解决方案,但是它们都无法正常工作。 第一个是在新操作中在数据库中创建对象,然后重定向到编辑操作。优点是,这是一个非常简单的修复程序。缺点是即使用户取消或从未提交过表单,这些对象也将与以前创建的对象一起显示在列表中,这非常令人困惑。 第二种可能的解决方案是将模型的附件字段提升到单独的模型。在创建时,我只需要创建一个附件对象。如果用户取消,它将使附件变为孤立状态,但这可能是可以的,因为可以定期清除这些孤立状态。问题是我找不到防止用户劫持孤立图像或其他任何图像的方法。除非我不能解决此问题,否则我将陷入困境。 我完全没有想法,在这方面真的需要一些帮助。 谢谢,godisemo 编辑: 我可能不清楚。在我的表格中,可以上传图片。在提交表单之前,图像会立即使用javascript上传到服务器。原因是我要允许用户裁剪图像。正如我先前解释的那样,使用现有对象不是问题,但是在创建新对象时就可以了。     

解决方法

我从未必须在数据库中已有该模型才能使回形针起作用。 您可以尝试的一件事如下。我不知道您的模型叫什么,但假设用户有一张图片。制作新表格,以便所有用户字段都在params [:user]变量中传递,然后使图像上传文件与params [:user]分开,例如params [:my_image]。 然后在您的控制器中验证并保存用户,然后在user.save之后附加图像。     ,我现在用完全不同的方法解决了这个问题。我没有考虑数据库,对象和模型,而是使用文件系统和临时文件来解决它。上载图像后,将通过回形针对其进行处理,然后将生成的图像移至我可以对其进行控制的文件夹中。 我的解决方案基于一篇很棒的文章,您可以在这里找到:http://ryantownsend.co.uk/articles/storing-paperclip-file-uploads-when-validation-fails.html     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。