Общий XML-ответ Rails на успешное действие AJAX?

Я думаю, что это должен быть простой синтаксический вопрос, но я не уверен, что мой подход правильный. Я использую скрепку, чтобы принять загрузку файла из Flash. Действие успешно создает объект и сохраняет загрузку, но когда оно пытается сгенерировать XML-ответ с генератором XML по умолчанию, я думаю, что оно задыхается, пытаясь включить вложение скрепки в XML-файл. Rails показывает ошибку 406, а Flash выдает ошибку ввода-вывода.

Я нашел хороший ресурс по встраиванию скрепок в XML, но это излишество. Все, что нужно для флэш-памяти, — это сообщение об успехе или неудаче. Что-то типа:

def jpg_stream
  @photo = Photo.new(:name => params[:name], :uploaded => Time.now)
  @photo.image = params[:image]
  respond_to do |format|
    if @photo.save
      format.xml  { "<success/>" }
    else 
      format.xml  { render :xml => @photo.errors, :status => :unprocessable_entity }
    end
  end
end

Какой должна быть эта линия?

format.xml  { "<success/>" }

ИЗМЕНИТЬ

Это трассировка стека ошибок. Я думаю, что у Rails нет проблем с возвратом всего, что сгенерировано, ошибка 406 означает, что браузер/Flash не примет ответ.

Started POST "/generate_jpg" for 127.0.0.1 at 2011-01-25 12:59:24 -0700
  Processing by PhotosController#jpg_stream as HTML
  Parameters: {"name"=>"Test snapshot", "stream_id"=>"1", "Filename"=>"this.jpg",     "image"=>#<ActionDispatch::
Http::UploadedFile:...
[paperclip] identify -format %wx%h "C:/Users/Sam/AppData/Local/Temp/stream20110125-4048-zqbu60.jpg[0]" 2>NUL
  ←[1m←[35mAREL (1.0ms)←[0m  INSERT INTO "photos" ("name", "description", "stream_id", "created_at", "updated_at", "image_file_name", "image_content_type", "image_file_size", "image_updated_at") VALUES ('Test snapshot', '2011-01-25 19:59:24.630999', 1, '2011-01-25 19:59:24.687002', '2011-01-25 19:59:24.687002', 'this.jpg', 'application/octet-stream', 12251, '2011-01-25 19:59:24.651000')
[paperclip] Saving attachments.
[paperclip] saving .../system/images/86/original/this.jpg
Completed 406 Not Acceptable in 108ms

person RSG    schedule 25.01.2011    source источник


Ответы (1)


Сначала я бы попробовал более простую версию: render :xml => "<success/>". То есть полностью отбросить respond_to, оставить только

if @photo.save
  render :xml => "<success/>"
else 
  render :xml => @photo.errors, :status => :unprocessable_entity
end

Я не уверен во всех нюансах respond_to (сам не использую), но для выполнения format.xml { "<success/>" } может потребоваться шаблон erb от вас.

Включение трассировки стека ошибок тоже было бы неплохо.

person Nikita Rybak    schedule 25.01.2011