Какую идеальную ошибку следует поднять, если введенный пользователем URL неверен? - PullRequest
5 голосов
/ 16 июля 2009

У меня есть действие, которое ищет записи на основе параметра URL. URL для действия выглядит примерно так:

http://domain.com/records/filter/<filtercode>

Если пользователь вводит неправильный код фильтра, я хотел бы приложить к

  • выдать ошибку, чтобы Hoptoad сообщил мне об ошибке.
  • рендерит 404 вместо 500 в рабочей среде

Я понимаю, что некоторые ошибки Rails, такие как ActiveRecord :: NotFound и ActionController: RoutingError, будут отображать 404 в рабочей среде. Поэтому я хотел бы поднять эту ошибку, когда пользователь вводит недопустимый код фильтра в URL.

Теперь мой вопрос: что является идеальной ошибкой в ​​такой ситуации? Есть ли в сети список ошибок / исключений Rails?

Ответы [ 3 ]

4 голосов
/ 06 сентября 2011

Вы ищете

ActionController::RoutingError

Мне нравится делать это в моем application_controller:

  def not_found
    raise ActionController::RoutingError.new('Not Found')
  end

Затем в других контроллерах, скажем, страницы # показывают, например, я могу сделать:

def show
  unless @page = Page.find_by_permalink(params[:permalink])
    not_found
  end
end
3 голосов
/ 16 июля 2009

Вы должны ловить любые ошибки, выдаваемые Rails, поскольку ни одна из них не предназначена для работы с пользователем ... Когда исключение всплывает до ответа HTTP, оно всегда будет проявляться как HTTP 500.

Что совершенно нормально, так это перехватить исключительную ситуацию и обработать ее, установив статус HTTP на 404 и выдав свою собственную ошибку, возможно, говорящую «мы искали это, но ничего не нашли». Или, если безопасность вызывает беспокойство, просто скажите «не найден» действительно причудливым способом.

2 голосов
/ 16 июля 2009

Если он ищет записи и не находит никакого логического способа, то будет использовать ActiveRecord :: NotFound, не так ли?

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