Загрузка Ajax-файла с помощью скрепки
Я использую сценарий загрузки файла ajax, чтобы загрузить фотографию, и использую скрепку для обработки этой фотографии в рельсах.
Сценарий http://valums.com/ajax-upload/
скрипт имеет переменную с именем qqfile, жестко запрограммированную для имени загружаемого файла, поэтому передаваемые параметры
qqfile=filename.jpg
в скрепке мой объект изображения называется фото, поэтому скрепка ожидает элемент фото, а я "!! думаю!!" это то, что вызывает мою проблему.
Я пробовал следующее
1) в моей модели я попытался присвоить имя параметра правильному имени объекта с помощью
alias_attribute :qqfile, :photo
но когда я делаю это, скрепка фактически не сохраняет модель вообще.
Я удалил alias_attribute и попытался предоставить псевдоним в моем контроллере
Def Create new_photo = {фото: params[:qqfile]} @temp_photo = TempPhoto.new(new_photo); if @temp_photo.save return render:text => '{success:true}' еще return render:text => '{success:false}' конец конец
с этим изменением модель сохраняется в БД, но все поля фотографии имеют значение NULL.
что-нибудь очевидное, что я здесь делаю не так?
1 ответ
Наконец я получил лекарство от этой проблемы. Это общее решение. Прежде всего, загрузите код js и сохраните его как jquey.form.js в assets/javascripts. Включить в application.js как
//= require jquery.form
Далее ваш взгляд. Который может выглядеть так
<div id="image_view">
<%=image_tag @model.image_field.url %>
</div>
Далее ваша форма для загрузки изображения [Вы можете использовать загрузочный модал для визуализации этой формы. Тогда будет красивее]
<%=form_for @model, :html => { :multipart => true, :id => "form-id" }, :url => url_for(:controller => 'controller', :action => 'method_name') do | f | %>
Upload picture : <%= f.file_field image_field %>
<%= f.submit "Save changes", :id => :upload_pic %>
<% end %>
Затем добавьте JavaScript в файл, в котором отображается форма
<script type="text/javascript">
$(document).ready(function(){
$('#upload_pic').click(function() {
$("#edit_form").ajaxForm({ target: "#image_view" }).submit();
return false;
});
});
</script>
Метод контроллера похож на метод создания или обновления
#image_view is just a div. where the response from ajax function can be loaded.
Надеюсь, вы, люди, знаете, как выглядят модель и Gemfile. Я думаю, что это может помочь вам. Для любого запроса, пожалуйста, прокомментируйте ту же тему. Спасибо.