【发布时间】:2013-11-07 19:22:54
【问题描述】:
模型使用图像的远程 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。这会导致上述代码多次上传。
- 控制器代码对只上传一次图像是否正确?
- 有没有什么方法可能是我把事情搞砸了并导致了@item.image?当它应该为真时返回假?也许是图像老化?
【问题讨论】:
-
为了进一步复杂化,我运行了一项定期将新数据分层到对象中的作业,这可能会更改时间戳。这可能是 CarrierWave 的问题吗?分层不会改变安装 CarrierWave 的字段。
-
似乎没人知道 CarrierWave?哦,我已经在第一次上传时设置的数据库中添加了我自己的标志。我在触发另一个之前检查它。这解决了问题,但以非 CarrierWave 的方式。
标签: ruby-on-rails image carrierwave image-caching