Force Rails 3动态查找器抛出RecordNotFound异常?

时间:2011-02-22 21:58:13

标签: ruby-on-rails ruby exception activerecord

是否可以强制Rails动态查找器抛出ActiveRecord::RecordNotFound异常而不是在找不到结果时返回nil

例如,如果名为'Nuka-Cola'的饮料不存在:

@not_found = Beverage.find_by_name('Nuka–Cola')

而不是

@not_found == nil

可以

.find_by_name('Nuka–Cola')

方法调用抛出ActiveRecord::RecordNotFound异常?

或者我是否必须检查nil并手动抛出异常?

2 个答案:

答案 0 :(得分:21)

使用爆炸版。

@not_found = Beverage.find_by_name!('Nuka–Cola')

答案 1 :(得分:-2)

非常感谢,幌子

如果您正在处理一些REST API,那将会更有用。 而不是显示html异常页面,渲染有意义的JSON或XML。

class ApiController < ApplicationController
 rescue_from ActiveRecord::RecordNotFound, :with => :not_found

  def not_found(exception = nil)
    render :json => { :message => exception.message, :request => request.fullpath }, 
                      :status => 404
  end
end    
相关问题