Rails:ActiveRecord :: RecordNotFound异常处理异常的最佳方法

时间:2015-09-17 09:22:23

标签: ruby-on-rails activerecord

我对rails.please绝对不熟悉帮助我。

我们可以处理这种异常的可能性有多大。 因为Rails提供多种选择来查找记录。但是有一段时间很难找到最好的一个。

SO

在此控制器中获取针对id

的记录
class Api::ShowController < ApplicationController
      def get
        id = params[:id]
       # render json: id and return
        if id != nil
          @post = Post.find(id)
        else
          @posts = Post.all
        end
          render json: @posts
      end
    end

它显示:

  

Api中的ActiveRecord :: RecordNotFound :: ShowController#get

错误就在这一行

  

@post = Post.find(id)

2 个答案:

答案 0 :(得分:2)

看起来你必须做一些改变:

def get
  if params[:id].present?
    @post = Post.find_by(id: params[:id])
    if @post.nil?
      render json: { 
        :success => false,
        :message => "Post not found."
      }
    else
      render json: @post
    end
  else
    @posts = Post.all
    render json: @posts
  end
end

注意:对于Rails 4 find_by_id将来会弃用,因此您必须使用find_by(id: params id)。链接下方:

rails 4 deprecations

答案 1 :(得分:1)

这意味着您的数据库中没有ID为3的Post记录。Post.find()如果找不到具有请求ID的帖子,则会返回错误。你可以使用Post.find_by_id()来返回一个null对象,但是你需要处理Post可以做的所有Nil所不能做的事情。

这里有一些你可能希望在这里改变的事情。

  • 找不到记录时的错误处理,当您查找的帖子不存在时,您可能希望返回一些特定的JSON。
  • 您正在创建两个属性之一,@ post或@posts,但尝试渲染@posts的json版本。如果找到帖子,这将是零。
  • 正如评论链中所讨论的,标准的Rails方法是使用索引方法返回所有记录,使用show方法返回单个记录。