CarrierWave:检测图像是否已上传

时间:2013-11-07 19:22:55

标签: ruby-on-rails image carrierwave image-caching

模型使用远程URL播种图像,这意味着它不是在Rails中创建的数据库条目。然后第一次从Rails中的数据库中取出我想要检测到图像尚未上传,为图像URL分配remote_seed_url并保存!触发CarrierWave上传。显然,我只希望这样做一次,但下面的代码有时会不止一次上传相同的图像。

class Item
    include Mongoid::Document
    include Sunspot::Mongoid2

    field :image, type: String
    field :remote_seed_url, type: String #URL for image
    mount_uploader :image, ImageUploader 
end

然后在控制器中

def show
    @ item = Item.find(params[:id])
    # if CarrierWave has already uploded then do nothing
    if !@item.image?
        @item.image = @item.remote_seed_url # next save will trigger the upload?
        @item.save!
    end
    respond_to do ...
end

@ item.image的值通常是“ new ”或“ old ”和@ item.image?当我看到它已经上传了图像时,有时会返回false。这会导致上述代码多次上传。

  1. 控制器代码是否正确才能将图片上传一次?
  2. 有什么方法可能会让事情搞砸并导致@ item.image?当它应该是真的时返回false?也许图像老化?

1 个答案:

答案 0 :(得分:3)

在字段上安装上传器后,当您调用该字段时,您将获得一个上传器对象。如果你想检查是否有文件,你应该调用" file"在那个对象上:

[1] pry(main)> item.image.class
=> ImageUploader
[2] pry(main)> item.image.file.class
=> CarrierWave::SanitizedFile
[3] pry(main)> item.image.file.nil?
=> false