Как я уверен, вы знаете, это похоже на People.find(id)
, за исключением того, что find
вызывает ошибку.
Однако People.find_by_id(id)
возвращает ноль, если запись не найдена, что, я подозреваю, позаботится обо всем, что вам нужно. Вам не нужно проверять, что вы помещаете в ActiveRecord правильный тип данных и тому подобное; он обрабатывает риски внедрения SQL, поэтому проверка заранее не повлияет на реальное поведение.
Если мы просто смотрим на действие show
, то есть еще более элегантный способ: вместо использования find_by_id
и проверки на nil, используйте find
, пусть ошибка всплывет и контроллер ловит его с помощью rescue_from
. (По умолчанию в работе ActiveRecord::RecordNotFound
будет пойман и спасен при отображении универсального 404, но вы можете настроить это поведение при необходимости.)
class UsersController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
def show
@user = User.find params[:id]
end
protected
def not_found
flash[:error] = "User not found"
redirect_to users_path
end
end
Код не проверен, только для иллюстрации;)