在AJAX Rails 5.2中,使用Active Storage上传图像附件的确存在一些问题。以下是一个解决方法的示例代码:
首先,确保你已经按照Active Storage的官方文档正确地设置了Active Storage。
然后,在你的视图文件中,添加一个表单元素来上传图像文件:
<%= form_with(url: '/upload', local: true, id: 'image-form') do |form| %>
<%= form.file_field :image %>
<%= form.submit 'Upload' %>
<% end %>
接下来,在你的JavaScript文件中,使用jQuery的AJAX来处理表单的提交:
$(document).on('submit', '#image-form', function(e) {
e.preventDefault();
var formData = new FormData(this);
var url = $(this).attr('action');
$.ajax({
type: 'POST',
url: url,
data: formData,
dataType: 'script',
processData: false,
contentType: false,
success: function(response) {
console.log('Image uploaded successfully.');
},
error: function(response) {
console.error('Error uploading image.');
}
});
});
最后,在你的控制器中,处理图像上传的逻辑:
class ImagesController < ApplicationController
def create
@image = Image.new(image_params)
if @image.save
render :create
else
render json: { error: @image.errors.full_messages.join(',') }, status: :unprocessable_entity
end
end
private
def image_params
params.require(:image).permit(:image)
end
end
在上面的示例代码中,Image
是一个Active Record模型,它包含一个image
属性来保存上传的图像文件。
这样,你就可以通过AJAX方式在Rails 5.2中上传图像附件了。记得在你的路由文件中添加相应的路由来处理图像上传的请求。