Найти проект по Постоянная ссылка, 404, если не найден - PullRequest
3 голосов
/ 25 марта 2009

Я изменил свой контроллер показа, чтобы находить записи по их постоянной ссылке, а не по их идентификатору (для сочной SEO).

def show
  @project = Project.find_by_permalink(params[:id])
end

Но, если я наберу localhost: 3000 / projects / foo (и нет проекта с постоянной ссылкой foo), я получу ошибку 500 серверов вместо 404 не найден.

Почему это так и как я могу это исправить?

Ответы [ 3 ]

7 голосов
/ 26 марта 2009

Это может быть дополнение 2.3, но вы можете просто использовать восклицательный знак после динамического поиска, например:

def show
  @project = Project.find_by_permalink!(params[:id])
end

Если ничего не найдено, возникает исключение ActiveRecord::RecordNotFound.

0 голосов
/ 26 марта 2009

Или вы можете вызвать исключение 404.

0 голосов
/ 25 марта 2009

Я предполагаю, что получаю ошибку 500, потому что ваше действие show пытается ссылаться на атрибуты @project, когда поиск возвращает nil

Вы должны проверить, чтобы убедиться, что @projects имеет некоторые данные, и иначе вывести 404 вручную. На моем сайте я выполняю пользовательское действие под названием «ошибка» в похожей ситуации:

render :action => 'error', :status => 404 if @projects.blank?

Если существует @projects, действие show отображается как обычно.

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