Ruby on rails 导轨3、S3、回形针附件(如图所示)';她自己的模型?
因此,我正在开发一个应用程序,用户可以上传和管理照片,并将一系列特定于行业的元数据附加到照片上 照片模型中包含所有这些元数据,我使用回形针将实际图像文件附加到模型中,并将图像存储在AmazonS3上 用户交互当前的工作方式如下:Ruby on rails 导轨3、S3、回形针附件(如图所示)';她自己的模型?,ruby-on-rails,model,amazon-s3,paperclip,attachment,Ruby On Rails,Model,Amazon S3,Paperclip,Attachment,因此,我正在开发一个应用程序,用户可以上传和管理照片,并将一系列特定于行业的元数据附加到照片上 照片模型中包含所有这些元数据,我使用回形针将实际图像文件附加到模型中,并将图像存储在AmazonS3上 用户交互当前的工作方式如下: 用户单击“添加照片”并被带到“新照片”页面,在该页面上,他将看到一张表单 表单上的第一件事是文件选择器。用户选择一个文件 下面是几个不同的元数据字段供用户填写,因此用户需要填写这些字段 用户点击submit,文件上传并创建一个新的照片对象,用户被重定向到另一个页面 因此
@photo.attachment.file.url
而不是我现在使用的更简单的@photo.file.url
。我不想把它埋得太深
此外,将其分为两种模式会引发管理孤儿的问题,我目前不必处理这一问题
因此,我的问题是:
而不是访问它。
我知道这是个大问题,所以提前非常感谢您的帮助 我建议您将
新建
操作替换为编辑
操作(当用户选择该操作时,您可以自动创建照片模型。这样,您可以使用AJAX文件上载(某些现代浏览器支持)使用Flash备份进行上传,并编辑元数据。要进行上传,请查看或。这样简单地定义照片url有什么错
class Photo
def url(*args)
attachment.url(*args)
end
end
无需在这里花心思。基本上,您将照片对象的创建分为两部分:上传照片和添加元数据。在非AJAX站点中,这将是两个单独的步骤,分别位于两个单独的页面上
我要做的是允许AJAX上传实例化一个照片对象,并保存它(与上传的照片一起)。然后,我会让AJAX代码将一个令牌返回到与会话变量相对应的站点,让表单知道照片的记录已经创建。当用户提交表单的其余部分时,如果令牌存在,它将知道填充已经创建的照片对象上的数据。如果令牌不存在,它将知道它需要从头开始创建照片对象。经过一周的实验后,我想我应该发布我最后做的事情: 事实上,我确实将照片分成了两个模型,因为我最终不得不用我尝试过的任何方法创建空记录。我发现最终使用两个单独的模型更容易,因为:
Attachment.where即可(:parent_id=>nil)
并删除所有这些我希望这能为其他人省去一些麻烦。如果你需要带有附件的Ajax功能,最好让它们成为自己的模型。另外,要将Ajax文件上传到表单,请查看。这保存了我的应用程序。只是想知道,你是否没有设置关联的dependent子句?例如
Class Photo < ActiveRecord::Base
:has_one :attachment, :dependent => :destroy
end
Class-Photo:destroy
结束
这将防止孤立记录,因为每当在Photo上调用销毁方法时,它都会首先执行Photo.attachment.destroy。它与:has_many一起工作。这是一个好主意。谢谢!尽管如此,它实际上并没有回答我的问题:我应该将其拆分为两个模型以获得AJAX功能,还是应该做一些不同的事情TW:我从Thoughtbot中认出了你的头像——谢谢你的回形针!这很有趣,我没有想到。你是在NEW/CREATE中复制编辑/更新操作的代码,还是有一种简单的方法告诉新操作改用EDIT/UPDATE?另外,我想我会将所有验证更改为“:on=>:UPDATE”而不是默认值?@Andrew我可能会从“新建”重定向到编辑(在初始化并保存基本照片模型之后)。至于验证,是的,您可以将它们移动到更新,但是您可能必须允许大多数字段为空(因为它们是更新的AJAX)。