我正在努力将应用程序升级到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
列,对吧?
答案 0 :(得分:1)
您安装上传者的列应该存储上传文件的“标识符”。默认情况下,它只是文件名,但您可以将其覆盖为几乎与记录ID不同的任何内容(因为在保存之前您无法知道它是什么)。
要覆盖:在上传器类中,添加以下定义:
def identifier
# This is what gets put in the database column!
model.created_on
end
在这个例子中,我使用了模型中的created_on属性。如果要创建自己的存储机制,则需要能够通过此标识符唯一标识文件,因此请谨慎选择。
我建议重命名该列,以便描述正在上传的文件(如在carrierwave示例中)。然后,您可以随时将标识符从文件名更改为其他内容。