我想呈现一个自定义错误,当用户无法通过id找到类'Plan'时显示该错误。问题是它没有到达if
语句。
NB.我正在使用失眠症来测试它。
class Api::V1::PlansController < Api::V1::BaseController
before_action :authorize_request
def show
@plan = Plan.find(params[:id])
if @plan.errors.any?
render json 'wrong'
else
@accounts = @plan.accounts
render json: @plan, status: :created
end
end
end
1条答案
按热度按时间ryevplcw1#
ActiveRecord::FinderMethods#find
将在无法找到某个id时引发ActiveRecord::RecordNotFound
异常。当引发异常时,它将停止执行。您可以使用
rescue_from
处理异常:使用
find_by
的建议最初听起来似乎是个好主意,直到您意识到异常确实很有用,因为它可以暂停操作的执行并防止nil错误。使用
rescue_from
也是一个非常强大的模式,因为它允许您在继承链中向上移动错误处理,而不是重复自己的操作:但最有可能的是,你根本就不需要这个。Rails通过发送一个
404 - Not Found
响应来在框架级别拯救ActiveRecord::RecordNotFound
。客户端不需要任何上下文,除了本例中的状态代码,返回完全不必要的JSON错误消息响应是一个反模式。