Я обновляю проект, который использует 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-файл в форме был скопирован напрямую.из рабочей формы ...