4

模型使用图像的远程 url 播种,这意味着它不是在 Rails 中创建的 db 条目。然后第一次从 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?当它应该为真时返回假?也许图像老化?
4

1 回答 1

3

将上传器安装到字段后,当您调用该字段时,您将获得一个上传器对象。如果要检查是否存在文件,则应在该对象上调用“文件”:

[1] pry(main)> item.image.class
=> ImageUploader
[2] pry(main)> item.image.file.class
=> CarrierWave::SanitizedFile
[3] pry(main)> item.image.file.nil?
=> false
于 2015-02-07T07:57:10.480 回答