2009-05-06 57 views

回答

181

因爲這是建築師打算找(ID)的工作,如在RDoc的顯示方式:

查找ID - 這可以是一個特定的ID(1),ID列表( 1,5,6)或一個ID數組([5,6,10])。如果沒有記錄可以找到所有列出的ID,那麼RecordNotFound將被引發。

如果您不希望引發異常,請使用find_by_id,如果找不到具有指定id的對象,則返回nil。你的例子將是User.find_by_id(1)

+0

但它返回RecordNotFound的優點是什麼?爲什麼有人想要這種行爲,而不是僅僅返回零? – Arcolye 2010-11-27 07:59:40

+2

引發RecordNotFound,不返回。這使得調用者的控制流程可以不同,因爲您不必檢查返回值是否爲零(而是使用開始/救援塊)。 – runako 2010-11-29 23:48:30

-3

除了runako的解釋,選擇是否引發異常確實非常有用。我正在研究一個博客應用程序,並且我想添加對查看下一個或上一個博客條目的支持。我能夠添加兩個實例方法我Post模式,簡單地返回nil當您嘗試查看第一篇文章,或下次開機時觀看帖子的最後,當拿到以前的帖子:

def next 
    Post.find_by_id(id + 1) 
end 

def previous 
    Post.find_by_id(id - 1) 
end 

這避免了我幫助代碼有條件地生成Previous Post/Next Post鏈接,以處理RecordNotFound異常,這很不好,因爲它將使用控制流的異常。

相關問題