Да, но это немного сложно. Проблема в том, что вы не можете отправлять загруженные файлы через AJAX, НО существует простой обходной путь, который использует большинство людей.
Вот как это работает: вы загружаете фотографию в невидимый iFrame. Вы устанавливаете этот iframe как цель формы загрузки, и пользователь сможет отправить форму без перезагрузки страницы.
Пример:
<iframe id="upload"></iframe>
<%= form_for @photo, :html => { :multipart => true, :id => 'photo_upload_form', :target => 'upload' }, :url => photos_path do |f| %>
<div class="field">
<%= f.label :image, 'Upload Photo' %>
<%= f.file_field :image %>
</div>
<% end %>
... и, конечно, используйте CSS, чтобы скрыть iFrame. Мне кажется, у меня когда-то была проблема со скрытием iFrame с display: none
, поэтому я бы порекомендовал переместить его за пределы экрана, используя что-то вроде:
#upload { position: absolute; left: -10px; top: -10px; width: 1px; height: 1px; }
Наконец, вы можете использовать JavaScript в представлении, которое отображается внутри скрытого iFrame с помощью window.parent
, так что вы можете отобразить загруженное изображение внутри формы загрузки.