2013-03-05 2 views
1

Я пытаюсь выполнить настраиваемый ответ 404 в рельсах, но я не уверен, как передать статус: respond_with.Использование response_with для подачи 404?

Я знаю, что с render, я могу сделать что-то вроде этого:

render :status => :not_found, :json => {:response =>"There weren't any results"} 

Как я могу сделать что-то подобное с respond_with? Есть ли способ установить коды состояния с помощью respond_with?

Единственная причина, по которой я использую respond_with, состоит в том, что, насколько мне известно, это правильный протокол для использования respond_with, когда вы начали с respond_to. Если это не так, и я должен использовать render, пожалуйста, дайте мне знать!

ответ

5

См. the docs; respond_with принимает :status в качестве опции.

respond_with(@user, status: :not_found) do |format| 
    format.json { response: "There weren't any results" } 
end 
+0

Извините. Я не знаю, как я пропустил ваш ответ. Спасибо огромное! Отлично. К сожалению, я новичок в рубине, и я искал 'response_with' в документах, а не' Responder'. Это именно то, что мне нужно. – RileyE

1

Вместо того, чтобы установить определенный статус 404 в своем ответе, вы можете просто поднять ActiveRecord::RecordNotFound исключение и имеет тот же эффект. Check it here

+0

Извините за какое-либо замешательство, но с 'ActiveRecord :: RecordNotFound' не позволит настраивать ответы. Я знаю, что это было не очень ясно в моем вопросе, но я ценю ответ как полезный для его изучения. Спасибо! – RileyE

+0

Проблема с повышением 'ActiveRecord :: RecordNotFound' заключается в том, что он будет регистрироваться как исключение, и в зависимости от вашего API это не исключение. Возможно, вы только хотите проверить, существует ли ресурс. Напр. если тележка не существует (not_found), создайте ее, в основном попробуйте получить, чтобы показать, если она возвращает not_found, создайте сообщение для создания. –

Смежные вопросы