Соглашения по обработке ошибок URL в приложении Ruby on Rails - PullRequest
0 голосов
/ 05 января 2012

Я работаю над приложением Ruby on Rails, которое имеет следующий путь для просмотра страницы пользователя

/pics/user/:id

: id является сгенерированным атрибутом id. Мой вопрос заключается в том, чтобы приложение правильно обрабатывало номер, который не является идентификатором пользователя вместо: id.

Методы, которые я рассматривал: создание страницы ошибок и перенаправление на нее или перенаправление на другую страницу (в данном случае это страница со списком всех пользователей) и создание сообщения об ошибке. Верна ли любая из этих идей, или я должен сделать что-то еще полностью? Моя цель - как можно точнее придерживаться правильного рубина на рельсах и веб-соглашениях.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Обычно вы будете делать Model.find(params[:id]), и это повысит ActiveRecord::RecordNotFound, что заставит веб-сервер отправить 404 Not Found ответ.

1 голос
/ 05 января 2012

Единственное, что, я думаю, вы должны действительно сделать, это установить статус вашего ответа на 404 (передать :status => 404 для рендеринга.

Является ли ваша страница 404 просто глупой 'страница «Извините, ничего не найдено» или что-то более полезное (например, с предложениями о том, что пользователь, возможно, хотел), зависит от вас

0 голосов
/ 05 января 2012

Я использую следующий метод, хотя я думаю, что некоторые пуристы из RoR утверждают, что это неправильный способ сделать это ... но он работает, очень хорошо. Я предпочитаю этот метод бесполезной странице 404:

users_controller.rb

  before_filter :get_user, :only => [:show, :edit, :create, :update]

  # ... all your methods ...

  private
    def get_user
      @user = User.find(params[:id])
      rescue ActiveRecord::RecordNotFound
        redirect_to users_path, :alert => "User not found" and return false
    end
...