Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails CarrierWave:检测图像是否已上载_Ruby On Rails_Image_Carrierwave_Image Caching - Fatal编程技术网

Ruby on rails 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

模型的种子是图像的远程url,这意味着它不是在Rails中创建的db条目。然后,第一次从Rails中的DB中获取图像时,我想检测到图像尚未上载,为图像url分配远程种子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。这会导致上述代码上载多次

  • 控制器代码是否正确,以便只上传一次图像
  • 我有没有可能把事情搞砸,导致@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的问题吗?分层并没有改变卡里尔波的安装位置。似乎没有人知道卡里尔波?哦,我在第一次上传时设置的数据库中添加了我自己的标志。在触发另一个之前我会检查它。这解决了问题,但以非载波波形的方式。