Как манипулировать кодом состояния ответа из действия Rails Controller - PullRequest
3 голосов
/ 27 февраля 2011

Дано классическое действие контроллера. Посмотрите на МАРК. Мне нужно установить код состояния 200 для ответа. Справочная информация: swfupload, похоже, что решение для загрузки ajax-файлов отправляет данные в неправильном формате.

Я пробовал response.headers ['Status'] = 200, response.status 200, render: json => 'data',: status => 200. Но код статуса ответа не меняется.

def create
  if params[:Filedata]
    @medium = Medium.new(:swf_uploaded_data => params[:Filedata])
  else
    @medium = Medium.new(params[:medium])
  end

  respond_to do |format|      
    if @medium.save  
      format.html { redirect_to(@medium, :notice => 'Medium was successfully created.'); }
      format.xml  { render :xml => @medium, :status => :created, :location => @medium; }        
      MARK
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @medium.errors, :status => :unprocessable_entity }
    end
  end
end

Ответы [ 2 ]

5 голосов
/ 27 февраля 2011

Код состояния может быть объявлен только в командах возврата, таких как render, redirect_to .... и повлияет на эту команду возврата, нет способа установить код для всех ответов

Для format.html { redirect_to(@medium, :notice => 'Medium was successfully created.'); }, поскольку это перенаправление, код будет 3XX, и вы не можете его изменить, или перенаправление не будет работать

Для format.xml { render :xml => @medium, :status => :created, :location => @medium; } вы объявляете статус как созданный, это означает, что для рельсов код равен 201, для того, чтобы сделать его 200, измените его на:

format.xml { render :xml => @medium, :status => :ok, :location => @medium; }

0 голосов
/ 27 февраля 2011

В каком формате ожидается ответ AJAX?Вы отвечаете только на HTML и XML, поэтому, если он ожидает JavaScript или JSON, это может быть проблемой.

Кроме того, я не уверен, имеет ли это значение, но я никогда не видел условия внутриrespond_to блок, как вы показали.Обычно это так:

if @medium.save
  respond_to { |format| ... }
else
  respond_to { |format| ... }
end

Мне также не ясно, каким должен быть "МАРК".

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