如何在Carrierwave中为images [0]设置默认网址?

时间:2017-10-07 18:33:21

标签: ruby-on-rails json carrierwave

我有一个使用Carrierwave的标准图像上传器。我也在使用Postgres。所以这就是我的迁移看起来像将JSON添加为图像:

class AddImagesToListings < ActiveRecord::Migration[5.1]
  def change
    add_column :listings, :images, :json
    remove_column :listings, :image
  end
end

我想让图片[0]总是有一些图像,但似乎Carrierwave文档只涵盖了单个文件上传的内容。现在,这是我的default_url方法:

def default_url(*args)
    ActionController::Base.helpers.asset_path("default/" + ["default.jpg"].compact.join('_'))
end

当我只有:图像,这是有效的,但现在它不是。有没有办法设置图像[0]的默认值,这样我就可以获得每个列表的有效图像[0] .url(无论用户是否在列表中添加图像)?

1 个答案:

答案 0 :(得分:2)

由于Carrierwave没有帮助解决这个问题,也许你可以使用像写帮助器或回调这样的工作。 以下是您可能会喜欢的一些建议。

  1. 写一个帮手
  2. module CarrierwaveHelper
      def render_image_url(images, index)
        return "Default.jpg" if index == 0
        images[index].url
      end
    end
    

    只需在视图中调用render_image_url(images,0)而不是图像[0] .url

    1. 在模型中编写回调
    2.   

      before_create:assign_default_image   或者你可能需要before_update

      def assign_default_image
        self.image[0] = "default.jpg"
      end