【问题标题】:Systematic way to upgrade from attachment_fu to carrierwave?从attachment_fu升级到carrierwave的系统方法?
【发布时间】:2011-11-18 02:11:00
【问题描述】:

我正在努力将应用程序升级到 Rails 3,但 attachment_fu 已损坏,因此我正在转向carrierwave。我可以通过一个系统的过程来从 attachment_fu 升级到carrierwave吗?或者它的教程?现在,我对正确处理数据库中的所有内容更感兴趣。我正在使用附件_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 列,对吗?

【问题讨论】:

  • 是否有任何关于您完成此过程的记录?我正在升级一个旧的旧版应用程序,并且正在寻找一些流程描述。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 2019-04-17
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2020-05-13
    相关资源
    最近更新 更多