Rails и response_with: почему коды состояния не верны?
Я пытаюсь использовать контроллеры рельсов с открытыми костями и в то же время иметь более тонкую настройку. Если я нахожусь на: новом действии, я отвечаю с моим новым @instance, и я получаю код состояния 200 и отображаю: новый шаблон. На шоу тоже самое, другой шаблон. Все идет нормально. Но при создании у меня что-то неожиданное. Если новая запись была успешно завершена, и я вызываю response_with для нее, я перенаправлен на показ (код состояния 302), что верно. Но если новая запись не может быть создана из-за того, что запись недействительна, по умолчанию response_with отвечает, выпуская код состояния 200 и отображая новый шаблон. Шаблон правильный, код статуса - нет. Разве код ответа не должен быть в таком случае 422 (необработанный объект)?
1 ответ
Rails возвращает ответ 200, потому что он успешно обработал "новый" шаблон. Для запросов не AJAX это обычно работает нормально, так как в этом случае вы также будете отображать ошибки валидации для пользователей, чтобы они знали, что произошло.
Единственная причина, по которой вам нужен ответ 422, - это то, что информация была отправлена через AJAX, а ваш клиентский JavaScript зависит от кода ответа, чтобы знать, что делать. Как сказал Джим, вы всегда можете заставить код ответа с опцией:status отображать, если вам это нужно. В "простом" случае по умолчанию, хотя без участия AJAX, вам, вероятно, это не нужно.
Обновление: клиент jQuery может зависеть от кода ответа путем включения обратного вызова "error" в функцию .ajax или через .ajaxError.