2011-10-07 39 views
13

是否可以在rails上使用get_by_id_or_404函數。對於爲例,在我的控制器使用:在Rails上獲取模型或404

@destination = Destination.find_by_id(params[:id]) 

如果ID未設置或目標沒有找到,我怎麼能問的Rails重定向到一個404頁?

謝謝!

回答

30

在生產模式,那麼Rails會自動通過渲染的404錯誤頁面搶救ActiveRecord::RecordNotFound例外。

只需使用找不到結果時發現ActiveRecord::RecordNotFound的查找器的爆炸版本。

@destination = Destination.find_by_id!(params[:id]) 

但是,在你的情況下,沒有理由使用find_by方法。簡單地回退到find

@destination = Destination.find(params[:id]) 
1

我想在生產中,它會引發錯誤,並顯示404 OU 500

+2

除非您更改查找程序方法,否則該方法不會生成任何異常。 –

4

這是the guide:對的結束

您可以指定一個感嘆號(!)動態查找,讓他們提高一個ActiveRecord :: RecordNotFound錯誤,如果他們不返回任何記錄,就像Client.find_by_name!(「瑞安」)

發生這種情況時,Rails會呈現404頁爲您服務。此外,只需使用find作爲快捷方式find_by_id

@destination = Destination.find!(params[:id]) 
+1

不需要感嘆號!查看[find]的文檔(http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find),如果您將它傳遞給ID,它將引發RecordNotFound。 – molf

+1

我想你的意思是找到find_by_id的快捷方式! –