Загрузка 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. Я думаю, что это может помочь вам. Для любого запроса, пожалуйста, прокомментируйте ту же тему. Спасибо.

Другие вопросы по тегам