2011-06-14 19 views
2

應該是一個簡單的問題,但在SO它我無法找到任何東西,所以我只是扔雷在那裏:Ruby on Rails的「查找」和它的返回值

thing_i_use = Thing.find(params[:id]) 

因爲它代表,在沒有使用參數無事活動[:編號],該網站默認爲與堆棧跟蹤等開發頁面,聲稱沒有與ID沒有東西=等。

我想知道的是如何測試這樣的事情,如果params [:id]不存在,或者是對象本身,thing_i_use就是nil。基本上,使用對象的不存在在我的邏輯稍後在代碼。

回答

6

替換:

thing_i_use = Thing.find(params[:id]) 

有了:

thing_i_use = Thing.find_by_id(params[:id]) 

最新如果id不存在或爲nil不會吐出任何錯誤。

thing_i_use只會是nil,這將是唯一的測試。

+0

像魅力的一個。感謝humoring我的回報率newbiness。現在要弄清楚它的其餘部分。 – 2011-06-14 23:31:26

0

thing_i_use = Thing.find(params[:id]) rescue nil

+2

1)'救援nil'is衆所周知的抗圖案2)'rescue'costs性能 – apneadiving 2011-06-14 23:23:55

4

如果你想nil返回如果與該ID的對象不存在,你可以使用:

thing = Thing.find_by_id(params[:id]) 

如果你想測試,如果它存在(並獲得真/假):

Thing.exists?(params[:id])