2011-03-13 53 views
6

如何檢查friendly_id條目在獲取之前是否存在?rails friendly_id並檢查條目是否存在

例如:

def book 
    @book = Book.find(params[:book_id]) 
    end 

這沒關係,但我想如果friendly_id存在檢查之前,是這樣的:從RecordNotFound異常==>

def book 
    if Book.exists?(params[:book_id]) 
    @book = Book.find(params[:book_id]) 
    else 
    #404 not found 
    end 

回答

5

救援

def book 
    @book = Book.find(params[:book_id]) 
    #OK 
rescue ActiveRecord::RecordNotFound => e 
    head :not_found 
end 
+0

'find_by_id'將返回實例或零。雖然'find'或'find_by_id'會引發異常 – fl00r 2011-03-13 18:39:45

+0

謝謝,糾正了答案。複製粘貼總是會導致麻煩! – 2011-03-13 19:07:18

+0

無論如何,好辦法 – fl00r 2011-03-13 19:21:35

-1
@book = Book.find_by_id(params[:book_id]) 
if @book 
    # OK 
else 
    #404 not found 
enв 
1

我建議你移動迪帕克獅集團的解決方案來模擬像我一樣:

def self.find_by_friendly_id(friendly_id) 
    find(friendly_id) 
rescue ActiveRecord::RecordNotFound => e 
    nil 
end 

所以現在將由兩個ID和塞取書,不會拋出異常,就像標準的AR方法#find_by_id。
順便說一句,根據documentation#存在嗎? 方法現在是檢查記錄存在的正確方法!

13

作爲的friendly_id寶石的最新版本,你可以說:

Book.friendly.exists? params[:book_id] 
+2

這比接受的答案好多了。例外應該只適用於你不容易預測的事情 - 而不是你期望發生的事情。 – marksiemers 2015-02-27 18:12:56

+0

如果你使用:finders你可能會遺漏友好的,導致'Book.exists? PARAMS [:book_id]' – AndreiMotinga 2016-03-26 15:53:37