在ActiveRecordNotFound引发时找到未找到的模型

时间:2016-08-31 22:45:11

标签: ruby-on-rails activerecord

我有一个控制器在多个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}。有干净的方法吗?

2 个答案:

答案 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的属性modelid

rescue_from ActiveRecord::RecordNotFound, :with => :handler  

def handler(exception)  
  flash[:error] = "#{exception.model} with ID #{exception.id} not found"  
end