使用paperclip在rails中创建对象时上传AJAX文件

时间:2011-04-14 00:50:56

标签: ruby-on-rails ajax activerecord file-upload paperclip

我有一个头疼的问题,我似乎无法找到一个简单的解决方案。

我有几个模型,每个模型都有一个图像附件,属于用户。我做了一个非常好的ajax文件上传和图像裁剪表单,但是有一个问题。当我编辑已经存在于数据库中的对象时,一切正常,但是当我上传文件时,因为我创建了一个新对象,但它没有。问题是,为了能够上传和保存图像,该对象必须已经在数据库中。我找到了两个可能解决这个问题的方法,但没有一个能正常工作。

第一个是在新操作中创建数据库中的对象并重定向到编辑操作。优点是它是一个非常简单的修复。缺点是,即使用户取消或从未提交过表单,对象也会在列表中显示以前创建的对象,这非常令人困惑。

第二种可能的解决方案是将模型的附件字段提升到单独的模型。在创建时,我只需要创建一个附件对象。如果用户取消它会使附件孤立,但这可能是好的,因为可以定期清除孤儿。这样做的问题是我无法找到防止用户劫持孤立图像或任何其他图像的方法。除非我无法解决这个问题,否则我会陷入困境。

我完全没有想法,并且真的需要一些帮助。

谢谢,godisemo

编辑:

我可能不清楚。在我的表单中,可以上传图像。在提交表单之前,使用javascript将图像立即上传到服务器。原因是我想让用户裁剪图像。这对于使用现有对象来说是没有问题的,但是在创建新对象时,正如我之前尝试解释的那样。

2 个答案:

答案 0 :(得分:0)

我从来没有必要让数据已经在数据库中用于回形针工作。

您可以尝试的一件事是以下内容。我不知道你的模型叫什么,但让我们说用户有一个图像。制作新表单,以便所有用户字段都在params [:user] var中传递,但然后将图像上传文件与params [:user]分开,比如params [:my_image]。

然后在您的控制器中验证并保存用户,然后在user.save之后附加图像。

答案 1 :(得分:0)

我现在用一种完全不同的方法解决了这个问题。我没有考虑数据库,对象和模型,而是使用文件系统和临时文件解决了它。当图像上传时,它由回形针处理,然后我将生成的图像移动到我可以控制它们的文件夹中。

我的解决方案基于一篇非常好的文章,你可以在这里找到http://ryantownsend.co.uk/articles/storing-paperclip-file-uploads-when-validation-fails.html