【问题标题】:Find Model Not Found When ActiveRecordNotFound Raised引发 ActiveRecordNotFound 时查找未找到模型
【发布时间】:2018-03-29 06:37:57
【问题描述】:

我有一个在多个 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}。有没有干净的方法来做到这一点?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    你可以这样处理

    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
    

    【讨论】:

      【解决方案2】:

      用抛出的异常装备你的handler,这里是参数exception。现在你可以使用exception的属性modelid

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

      【讨论】:

        猜你喜欢
        • 2016-09-29
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多