Поверніть певний код стану http у Rails


Відповіді:


82

Для всієї програми:

# ApplicationController
before_filter :return_unavailable_status

private
  def return_unavailable_status
    render :nothing => true, :status => :service_unavailable
  end

Якщо вам потрібна спеціальна сторінка помилок, ви можете зробити:

render 'custom_unavailable_page', :status => :service_unavailable    

Якщо ви не хочете для певних контролерів:

# SomeController
skip_before_filter :return_unavailable_status

Для відображення нетипового зниження я повинен використовувати render "custom_unavailable_page"замістьrender :nothing => true
Sathish Manohar

1
@SathishManohar Точно. custom_unavailable_pageбуло б ім'ям файлу представлення, який ви б відтворили.
iwasrobbed

1
Де це задокументовано? Які ще статуси? api.rubyonrails.org/classes/ActionView/Helpers/…
Хлоя

3
@Chloe Я не вірю, що це задокументовано дуже добре, але ось список apidock.com/rails/ActionController/Base/…
iwasrobbed

1
ПОПЕРЕДЖЕННЯ ПРО ЗНИЖЕННЯ: :nothingопція застаріла і буде видалена в Rails 5.1. Використовуйте headметод, щоб відповісти порожнім тілом відповіді
juliangonzalez

102

Можна використовувати head

head 503
# or
head :service_unavailable

11
Я можу використовувати символи стану, такі як: service_unavailable Усі статуси: apidock.com/rails/ActionController/Base/…
freemanoid

1
@freemanoid: Мені особисто більше подобаються цілочисельні коди. Я їх уже знаю. Не потрібно запам’ятовувати ще один набір значень.
Серхіо Туленцев

3
ПОПЕРЕДЖЕННЯ ПРО ЗНИЖЕННЯ: :nothingопція застаріла і буде видалена в Rails 5.1. Використовуйте headметод, щоб відповісти порожнім тілом відповіді
juliangonzalez

1
@SergioTulentsev Я б просто оновив відповідь для використання, headі якщо ви хочете зберегти оригінальну відповідь для нащадків, просто поставте її нижче як "Оригінальна відповідь" або щось інше. Я думаю, що всі ми можемо погодитись, що headце шлях, тим більше render nothing: true, що застарілий у поточних версіях Rails.
Джошуа Пінтер

1
@JoshuaPinter: справді. про що я думав?
Серхіо Туленцев

1

Для мене працює наступне:

format.any { render :json => {:response => 'Unable to authenticate' },:status => 401  }

Відповідь :responseHTML на випадок, якщо до неї можна отримати доступ із браузера.

Здається, головка 503 візуалізації не працює з вищезазначеним твердженням.


1
Це було б погано для SEO. Наприклад, Google сприймає це як зламаний сайт, а не просто тимчасово не працюючий, але очікуваний для резервного копіювання. Дивіться це: yoast.com/http-503-site-maintenance-seo
лабіринт

Можливо, варто змінити це значення на "Послуга недоступна" / 503, тому воно відповідає меті запитання. Я припускаю, що синтаксис "render head" не працює для вас, а не код помилки?
mwfearnley
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.