Я сталкивался с этой проблемой несколько раз и наконец нашел рабочее (несколько) простое решение.Я не утверждаю, что этот код идеален, но он работает.
edit.html.erb
<%= image_tag "ajax-loader.gif", class: "ajax-loader" %>
<div class="image_preview">
<% if resource.picture.url %>
<%= image_tag resource.picture.url %>
<% end %>
</div>
<iframe id="upload_target" name="upload_target" style="display: none" onLoad="onload_test()"></iframe>
registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def upload_image_preview
# sleep 3.seconds # for testing how delay looks
@user = User.find(params[:id])
@user.update_attributes(preview_picture: params[:user][:picture])
render text: ""
end
def get_image_preview
@user = User.find(params[:id])
end
end
user_image_preview.js
var first_pass = true;
function onload_test() {
if (first_pass == false) {
$.getScript("/users/5/get_image_preview.js");
} else {
first_pass = false;
}
$(".ajax-loader").hide();
$(".image_preview").show();
}
$(function() {
$("input[type=file]").change(function(){
var form = $("form#edit_user");
var original_action = form.attr("action");
form.attr("action", "/users/5/upload_image_preview");
form.attr("target", "upload_target");
form.submit();
form.attr("action", original_action);
form.attr("target", "");
$(".ajax-loader").show();
$(".image_preview").hide();
});
});
Примечание: Я жестко запрограммировал некоторые значения URL.Это было только для отладки, у меня будут атрибуты данных в теге file_field, которые сообщат моему javascript, по какому URL-адресу разместить изображение.1025 *