2011-02-22 47 views
8

是否可以強制Rails動態查找器拋出一個ActiveRecord::RecordNotFound異常,而不是在找不到結果時返回nilForce Rails 3動態查找器拋出RecordNotFound異常?

例如,在名稱爲 '核子可樂' 的飲料不存在:

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

而不是具有

@not_found == nil 

莫非

.find_by_name('Nuka–Cola') 

方法調用拋出一個ActiveRecord::RecordNotFound異常?

或者我將不得不檢查nil並手動拋出異常?

回答

20

使用爆炸版本。

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

太棒了,謝謝! – stephenallred 2011-02-22 22:10:34

+0

簡單,完全像我期望的ActiveRecord實現這樣的功能。 – John 2014-04-30 04:52:46

-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