从attachment_fu升级到carrierwave的系统方法?

时间:2011-09-15 17:15:43

标签: ruby-on-rails-3 carrierwave attachment-fu rails-3-upgrade

我正在努力将应用程序升级到Rails 3,并且attachment_fu已损坏,所以我转向了carrierwave。是否有一个系统的过程,我可以通过从attachment_fu升级到carrierwave?或者是它的教程?现在,我更感兴趣的是让数据库端的所有内容都正确。我正在使用attachment_fu和carrierwave的文件系统存储选项。

我从http://ruby.simapse.com/2011/03/migrate-attachmentfu-to-carrierwave.html找到了一个模块UploaderFu,它告诉carrierwave使用与attachment_fu相同的目录和文件名。但这不是整个答案,只是其中的一部分。

例如,在数据库中,我有一个UserImage模型,:filename:content_type:size:width:height:user_id属性。我添加了:user_avatar列,以及以下内容到我的模型

attr_accessible :user_avatar
mount_uploader :user_avatar, UserAvatarUploader

究竟存储在:user_avatar中的内容。它只是文件名吗?或者是其他东西?我是否只需编写迁移即可将:filename中的数据(存储为"hello_world.png")移至:user_avatar?如果是这种情况,我应该使用原始:filename而不是创建:user_avatar列,对吧?

1 个答案:

答案 0 :(得分:1)

您安装上传者的列应该存储上传文件的“标识符”。默认情况下,它只是文件名,但您可以将其覆盖为几乎与记录ID不同的任何内容(因为在保存之前您无法知道它是什么)。

要覆盖:在上传器类中,添加以下定义:

def identifier
       # This is what gets put in the database column!
       model.created_on
end

在这个例子中,我使用了模型中的created_on属性。如果要创建自己的存储机制,则需要能够通过此标识符唯一标识文件,因此请谨慎选择。

我建议重命名该列,以便描述正在上传的文件(如在carrierwave示例中)。然后,您可以随时将标识符从文件名更改为其他内容。