ruby_filemagic загружает в формате AJAX, не иначе - PullRequest
0 голосов
/ 09 февраля 2011

Я обновляю проект, который использует ruby_filemagic для загрузки изображений.В iFrame есть форма AJAX, которая работает, но когда я переносю код в другую форму, очевидно идентично структурированную (например, также multipart, ссылающуюся на тот же объект, в данном случае @listing), он выдает ошибку.

Почему это так?Есть ли какое-то поведение в среде AJAX, при котором

сбойный тег формы выглядит так:

<form action="/listings/add_description" class="edit_listing" enctype="multipart/form-data" id="edit_listing_26" method="post" onsubmit="return validateForm(this,'listing_description');">
<div style="margin:0;padding:0;display:inline"><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="2VyJP37Ff1ADOoB6ZDEtS4FrdxwGNgnqqstB+hoNWu0=" />

В то время как тот, который работает, выглядит следующим образом:

<form target="imageUpload" method="post" id="new_listing" enctype="multipart/form-data" class="new_listing" action="/listings">
<div style="margin: 0pt; padding: 0pt; display: inline;"><input type="hidden" value="2VyJP37Ff1ADOoB6ZDEtS4FrdxwGNgnqqstB+hoNWu0=" name="authenticity_token"></div>

Успешноupload (из второй формы выглядит следующим образом:

Processing ListingsController#create (for 12.13.14.15 at 2011-02-09 12:40:03) [POST]
  Parameters: {"commit"=>"Create", "action"=>"create", "authenticity_token"=>"2VyJP37Ff1ADOoB6ZDEtS4FrdxwGNgnqqstB+hoNWu0=", "listing"=>{"end_date(3i)"=>"9", "discount_percent"=>"", "name"=>"test", "thumbnail"=>#<File:/var/folders/Oo/Oooj578kHdy3igRanTaILU+++TM/-Tmp-/RackMultipart20110209-5842-ipfdzh-0>, "start_date_text"=>"now", "category_id"=>"22", "regular_price"=>"100", "description"=>"test", "end_date(1i)"=>"2011", "end_date(2i)"=>"2", "sale_price"=>"30"}, "controller"=>"listings"}

При неудачной (из не-AJAX, первая форма выглядит следующим образом. Файл в / tmp создается, но в /var не равен:

Processing ListingsController#add_description (for 12.13.14.15 at 2011-02-09 12:41:39) [PUT]
  Parameters: {"commit"=>"Next -- Set Dates", "action"=>"add_description", "_method"=>"put", "authenticity_token"=>"2VyJP37Ff1ADOoB6ZDEtS4FrdxwGNgnqqstB+hoNWu0=", "listing"=>{"thumbnail"=>#<File:/var/folders/Oo/Oooj578kHdy3igRanTaILU+++TM/-Tmp-/RackMultipart20110209-5842-1k0wmd3-0>, "description"=>"Description"}, "controller"=>"listings"}
  City Load (0.4ms)   SELECT * FROM "cities" WHERE ("cities"."id" = 18996) 
found new listing

Errno::ENOENT (No such file or directory - /tmp/2c33a5f0-1684-012e-ab73-00254bb57590):
  /opt/local/lib/ruby/1.8/fileutils.rb:1299:in `unlink'
  /opt/local/lib/ruby/1.8/fileutils.rb:1299:in `remove_file'
  /opt/local/lib/ruby/1.8/fileutils.rb:1304:in `platform_support'
  /opt/local/lib/ruby/1.8/fileutils.rb:1298:in `remove_file'
  /opt/local/lib/ruby/1.8/fileutils.rb:772:in `remove_file'
  /opt/local/lib/ruby/1.8/fileutils.rb:550:in `rm'
  /opt/local/lib/ruby/1.8/fileutils.rb:549:in `each'
  /opt/local/lib/ruby/1.8/fileutils.rb:549:in `rm'
  app/controllers/listings_controller.rb:47:in `check_listing_exists'

ОБНОВЛЕНИЕ: в соответствии с запросом, вот действия контроллера: во-первых, действующее, создайте:

 def create
        @listing = Listing.new(params[:listing])
        @listing.merchant = Merchant.find(current_merchant)
        responds_to_parent do
            if @listing.save
                render :update do |page|
                    page.replace_html 'formView', :inline => "<div>Listing '#{@listing.name}' was successfully created.</div>"
                    page['formView'].setStyle('overflow' => 'auto')
                    page.delay(2) do
                        page.visual_effect(:toggle_appear, 'formView', :duration => 0.2)
                    end
                end
            else
                render :update do |page|
                    page.replace_html 'formView', :partial => 'new'
                end
            end
        end
    end

Теперь, то, что не удалось:

 def add_description 

      unless @listing.save || session["skip_validation"]
        session["skip_validation"] = true
        redirect_to :back
        return
      end

      @listing.current_step_index= session["current_step_index"] = 2
      @previous_stages = ["pre_listing","listing_comment"]
      @listing_partial = "complete_listing"
      render :partial => "listings", :layout => "application"
    end

Я должен упомянуть, что действие «add_description» работало и раньше, когда в форме не было файла html-файла для загрузки, но нет проверок для изображения thumnail, а html-файл в форме был скопирован напрямую.из рабочей формы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...