我相信你知道,这就像People.find(id)
,只是find
产生了一个错误。
但是,如果没有找到记录,则People.find_by_id(id)
返回nil,我怀疑这些记录会照顾到您需要的所有内容。你不需要检查你放入ActiveRecord的内容是否是正确的数据类型等;它处理SQL注入风险,因此提前检查不会影响实际行为。
如果我们只是希望在show
动作,不过,有一个更优雅的方式:而不是使用find_by_id
和检查零,使用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
未测试的代码,仅供参考)