Ruby on rails CarrierWave:检测图像是否已上载
模型的种子是图像的远程url,这意味着它不是在Rails中创建的db条目。然后,第一次从Rails中的DB中获取图像时,我想检测到图像尚未上载,为图像url分配远程种子url并保存!以触发CarrierWave上载。显然,我只想这样做一次,但是下面的代码有时会多次上传同一个图像Ruby on rails CarrierWave:检测图像是否已上载,ruby-on-rails,image,carrierwave,image-caching,Ruby On Rails,Image,Carrierwave,Image Caching,模型的种子是图像的远程url,这意味着它不是在Rails中创建的db条目。然后,第一次从Rails中的DB中获取图像时,我想检测到图像尚未上载,为图像url分配远程种子url并保存!以触发CarrierWave上载。显然,我只想这样做一次,但是下面的代码有时会多次上传同一个图像 class Item include Mongoid::Document include Sunspot::Mongoid2 field :image, type: String fie
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。这会导致上述代码上载多次
将uploader装入字段后,当您调用该字段时,将得到一个uploader对象。如果要检查是否存在文件,应调用该对象上的“文件”:
[1] pry(main)> item.image.class
=> ImageUploader
[2] pry(main)> item.image.file.class
=> CarrierWave::SanitizedFile
[3] pry(main)> item.image.file.nil?
=> false
为了使这更复杂,我运行了一个作业,定期将新数据分层到对象中,这可能会更改时间戳。这可能是CarrierWave的问题吗?分层并没有改变卡里尔波的安装位置。似乎没有人知道卡里尔波?哦,我在第一次上传时设置的数据库中添加了我自己的标志。在触发另一个之前我会检查它。这解决了问题,但以非载波波形的方式。