Загрузка Ajax-файла с помощью скрепки - PullRequest
0 голосов
/ 05 января 2012

Я использую скрипт загрузки файла ajax для загрузки фотографии и скрепку для обработки этой фотографии в рельсах.

Сценарий http://valums.com/ajax-upload/

сценарий имеет жестко запрограммированное имя переменной 'qqfile' для имени загружаемого файла, поэтому передаваемые параметры:

qqfile=filename.jpg

в скрепке мой объект изображения называется фотографией, поэтому скрепка ожидает элемент фото, и я '!! думаю !!' это то, что вызывает мою проблему.

Я пробовал следующее

1) в моей модели я попытался присвоить имя параметра правильному имени объекта с помощью

alias_attribute :qqfile, :photo

но когда я делаю это, скрепка на самом деле вообще не сохраняет модель.

Я удалил alias_attribute и попытался предоставить псевдоним в моем контроллере

    def create
    new_photo = {photo: params[:qqfile]}

    @temp_photo = TempPhoto.new(new_photo);
     if @temp_photo.save
        return render :text => '{success:true}'
     else
        return render :text => '{success:false}'
     end
    end

с этим изменением модель сохраняется в БД, но все поля для фотографий имеют значение NULL.

что-нибудь очевидное, что я здесь не так делаю?

1 Ответ

3 голосов
/ 07 января 2013

Наконец-то я получил лекарство от этой проблемы.Это общее решение.Прежде всего, загрузите код js и сохраните его как jquey.form.js в assets / javascripts.Включите в application.js как

//= require jquery.form

Далее ваш взгляд.Что может выглядеть следующим образом

<div id="image_view">
  <%=image_tag @model.image_field.url %>
</div>

Далее ваша форма для загрузки изображения [Вы можете использовать bootstrap modal для рендеринга этой формы.Тогда будет красивее]

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

...