可能重複:
Model.find(1) gives ActiveRecord error when id 1 does not existRails:爲什麼find(id)在rails中引發異常?
如果與1數據庫中的ID沒有用戶,試圖User.find(1)
將引發異常。
這是爲什麼?
可能重複:
Model.find(1) gives ActiveRecord error when id 1 does not existRails:爲什麼find(id)在rails中引發異常?
如果與1數據庫中的ID沒有用戶,試圖User.find(1)
將引發異常。
這是爲什麼?
因爲這是建築師打算找(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)
。
除了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
異常,這很不好,因爲它將使用控制流的異常。
但它返回RecordNotFound的優點是什麼?爲什麼有人想要這種行爲,而不是僅僅返回零? – Arcolye 2010-11-27 07:59:40
引發RecordNotFound,不返回。這使得調用者的控制流程可以不同,因爲您不必檢查返回值是否爲零(而是使用開始/救援塊)。 – runako 2010-11-29 23:48:30