4

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

UploaderFuhttp://ruby.simapse.com/2011/03/migrate-attachmentfu-to-carrierwave.html中找到了一个模块,它告诉 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列,对吗?

4

1 回答 1

1

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

要覆盖:在您的上传器类中,添加此定义:

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

在此示例中,我使用了模型中的 created_on 属性。如果您想创建自己的存储机制,那么您需要能够通过此标识符唯一标识文件,因此请注意您选择的内容。

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

于 2011-10-17T15:19:11.957 回答