Rails response_with не выводит статус вызова остальных - PullRequest
4 голосов
/ 11 ноября 2010

Я пытаюсь создать простой API для отдыха с рельсами, используя метод response_with, но он не хочет выводить какой-либо тип сообщения о состоянии

, например, я хочу, чтобы он не только возвращал json дляполучить вызов, но и статус в порядке.То же самое, когда сообщение или удаление работает / не удается.

В нескольких руководствах предлагается использовать дополнительные: параметры состояния, но, похоже, они вообще не влияют на вывод.

  def index
    @conns = Connection.all
    respond_with(@conns, :status => :ok)
  end

Это возвращает точно такую ​​же вещь, как если бы: status =>: okне было там.

Есть идеи ??

Спасибо!

Ответы [ 2 ]

8 голосов
/ 11 ноября 2010

:status => :ok устанавливает код состояния заголовка HTTP, т. Е. Он такой же, как :status => 200. Если вы хотите добавить что-то в тело ответа, вам нужно добавить это явно, например,

respond_with({:conns => @conns, :status => :success}.to_json)

EDIT

ОК, так что это не работает. Если вам не нужно отвечать ни на что, кроме JSON, вы можете просто использовать старый добрый render:

render :json => { :conns => @conns, :status => :success }

Если вам нужно разместить несколько типов ответов с помощью нового и яркого метода respond_with, вы можете создать класс, отвечающий на as_json:

class JsonResponse
  def initialize(data,status)
    @data = data
    @status = status
  end
  def as_json(options={})
    {
    :data => @data,
    :status => @status
    }
  end
end

Тогда назовите это так:

@conns = Connection.all
respond_with(JsonResponse.new(@conns,"success"))
2 голосов
/ 11 ноября 2010

Это потому, что он неявно вернул бы :status => :ok, когда ответ в порядке, что я думаю, это:)

Попробуйте с другим кодом состояния, как

:status => :not_found

Есть полный список кодов состояния в официальном справочнике ruby ​​on rails.

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