单个模型上的多个 Carrierwave mount_uploader

Posted

技术标签:

【中文标题】单个模型上的多个 Carrierwave mount_uploader【英文标题】:Multiple Carrierwave mount_uploader on a single model 【发布时间】:2012-05-22 14:44:58 【问题描述】:

我有一个名为 Recipe 的模型,它有 2 个使用载波的图像,所以在这个模型中我有这个来设置载波

mount_uploader :author_photo, AuthorUploader
mount_uploader :photo, PhotoUploader

我还为我的图片添加了多个版本,例如拇指、小、中、大

问题是。假设我有 2 张图片

Chocolate_Cake.jpg as the photo
My_Photo.jpg as author_photo

当我进入控制台并加载我的食谱并加载到 recipe.to_json 时,我从carrierwave 中获取了我的两张图片,但它们都显示了食谱的照片,而不是作者的照片。

     "recipe": [
    
        "author_photo": 
            "url": "/uploads/recipe/photo/8/Chocolate_Cake.jpg",
            "thumb": 
                "url": "/uploads/recipe/photo/8/thumb_Chocolate_Cake.jpg"
            ,
            "small": 
                "url": "/uploads/recipe/photo/8/small_Chocolate_Cake.jpg"
            ,
            "medium": 
                "url": "/uploads/recipe/photo/8/medium_Chocolate_Cake.jpg"
            ,
            "large": 
                "url": "/uploads/recipe/photo/8/large_Chocolate_Cake.jpg"
            
        ,
        "id": 8,
        "photo": 
            "url": "/uploads/recipe/photo/8/Chocolate_Cake.jpg",
            "thumb": 
                "url": "/uploads/recipe/photo/8/thumb_Chocolate_Cake.jpg"
            ,
            "small": 
                "url": "/uploads/recipe/photo/8/small_Chocolate_Cake.jpg"
            ,
            "medium": 
                "url": "/uploads/recipe/photo/8/medium_Chocolate_Cake.jpg"
            ,
            "large": 
                "url": "/uploads/recipe/photo/8/large_Chocolate_Cake.jpg"
            
        ,

所以由于某种原因,我的 json 响应没有正确显示我的上传者。

如果我要在控制台中输入这个,

 recipe.photo
 recipe.author_photo

他们想出了不同的图片网址

【问题讨论】:

【参考方案1】:

经过一些研究和朋友的帮助,我发现我可以覆盖配方模型的 as_json 方法来修复我得到的响应。

   def as_json(options = )
     super.merge('photo' => photo.as_json[:photo], 'author_photo' => author_photo.as_json[:author_photo])
   end

这个解决方案奏效了。

【讨论】:

这对我也有用,但你找到原因了吗?感觉像是 CarrierWave 或使用中的错误。 嘿,格里,不确定,但对我来说,它似乎使用了您设置的最后一个上传器,听起来确实是一个可能的错误/用法。

以上是关于单个模型上的多个 Carrierwave mount_uploader的主要内容,如果未能解决你的问题,请参考以下文章

在 ActiveAdmin 中使用 CarrierWave 多个图像

Rails 4使用carrierwave上传多个图像或文件

未定义的方法“image_will_change!”用于 Heroku 上的 CarrierWave

如何将已存储在 s3 上的文件添加到由同一数据存储支持的carrierwave?

在模型更新后,Carrierwave不会重新创建版本

使用Carrierwave上传器测试模型