我有一个控制器在多个ActiveRecord模型上调用.find
。我正在使用rescue_from方法来捕获未找到记录时引发的错误。但是,我无法找到未找到的记录类型。所以假设我的控制器看起来像这样:
class AccountController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, :with => :handler
def find_user
User.find(params[:user_id])
end
def find_post
Post.find(params[:post_id])
end
def handler
flash[:error] = "{model} not found"
end
end
问题是我需要告诉用户哪个记录没有找到,哪个是我在上面代码中的{model}。有干净的方法吗?
答案 0 :(得分:0)
您可以像这样处理它
post = Post.find_by id: params[:post_id]
flash[:error] = "Post not found" unless post
或者你可以将一个块传递给rescue_from
rescue_from ActiveRecord::RecordNotFound do |error|
# do something with error to recognize the model
end
答案 1 :(得分:0)
为您的handler
提供抛出的异常,此处为param exception
。现在,您可以使用exception
的属性model
和id
:
rescue_from ActiveRecord::RecordNotFound, :with => :handler
def handler(exception)
flash[:error] = "#{exception.model} with ID #{exception.id} not found"
end