模型使用远程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。这会导致上述代码多次上传。
答案 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