【发布时间】:2017-08-21 15:47:41
【问题描述】:
我在我的 Rails 应用程序(后端)上使用 carrierwave 和 cloudinary,并在 update 上使用 PATCH 操作 covers_controller:
def update
@book = Book.friendly.find(params[:slug])
unless @book.nil?
@cover = @book.cover
end
respond_to do |format|
if @cover.update(cover_params)
format.json { render json: @cover, message: 'Saved' }
else
format.json { render json: @cover.errors, status: :unprocessable_entity }
end
end
end
这与$('form#addFrontImage').submit() 一起工作得很好,这导致了正常重新加载封面#show 页面到 :update 操作,因为图像已保存到 cloudinary。
然后我决定用 ajax 上传替换为 .submit() 方法,如下所示:
function uploadFrontImage (inputFile) {
var validated = false
validated = validateFiles(inputFile)
if (validated !== true) return
$('.loader').removeClass('hidden')
var file = document.getElementById('cover_front_image').files[0]
var reader = new FileReader()
reader.readAsDataURL(file)
reader.addEventListener('load', function () {
document.querySelectorAll('#frontUploadPreview')[0].src = reader.result
}, false)
var form = $('#addFrontImage')
var $file = $('#cover_front_image')
var formData = new FormData()
formData.append('cover[front_image]', $file[0].files[0])
$.ajax({
url: form.action,
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'PATCH',
success: function(res) {
console.log(res)
var frontImage = new Image()
frontImage.src = reader.result
$('div.front span img').replaceWith(frontImage)
$('.loader').addClass('hidden')
},
error: function(err) {
console.error(err)
}
})
}
现在,当我第一次将图像上传到资源cover 的给定实例时,这段代码就可以工作了。但是当我重新上传另一个图像以覆盖之前的图像时,请求只是成功完成但没有保存图像。
这里发生了什么?我该如何解决?
【问题讨论】:
-
您是第二次收到新的路径响应了吗?
-
我可以使用
update.js.erb获取表单的新实例,但目前似乎存在不同的问题。即使在页面刷新后,它也不会将 new_image 上传到模型。
标签: ruby-on-rails ajax cloudinary