如果我沒有一行id=params[:id]
我怎麼能檢查它,因爲 當我寫無法與「ID」 =參數發現後
def show
@post=Post.find(params[:id])
if @post.nil?
@post={
title:"No such post",
post:"No such post"
}
end
end
我得到的錯誤。
如果我沒有一行id=params[:id]
我怎麼能檢查它,因爲 當我寫無法與「ID」 =參數發現後
def show
@post=Post.find(params[:id])
if @post.nil?
@post={
title:"No such post",
post:"No such post"
}
end
end
我得到的錯誤。
show
控制器預計只顯示現有元素。當元素(Post
實例)不存在時,find
將引發異常。正如@Michal在評論中建議的那樣,通常不存在的實體正在使用404
響應或類似的方式處理。
其時,正,不過,你可能會欺騙和Rails:
@post = Post.find(params[:id]) rescue {
title: "No such post",
post: "No such post"
}
這不是一個生產解決方案,當然,但學習階段中可能會有所幫助。
謝謝;所以它就像「try {} except { 「其他語言的陳述; –
發現(*參數)
查找ID - 這可以是一個特定的ID(1),IDS(1,5,6名單)或ID數組([5,6,10])。如果沒有記錄可以找到所有列出的ID,那麼RecordNotFound將被引發。
所以,如果find
無法找到與id
你要找的東西,它提出了一個ActiveRecord::RecordNotFound
例外,而不是返回nil
像你想它。該異常最終被裏面的Rails深處理,被轉換爲404
你可以陷阱例外自己:
def show
@post = Post.find(params[:id])
rescue ActiveRecord::RecordNotFound
@post = {
title: "No such post",
post: "No such post"
}
end
請注意,你只捕獲你期望的具體例外看,光禿的rescue
幾乎總是一個錯誤,因爲它可以隱藏錯誤。
您還可以使用find_by
:
find_by(*參數)
[...]
如果沒有找到記錄,返回nil
。
這樣的:
def show
@post = Post.find_by(:id => params[:id])
if @post.nil?
@post = {
title: "No such post",
post: "No such post"
}
end
end
例外都是爲了處理錯誤和其他異常情況,他們註定不會被用於正常的流量控制。我可能會使用find_by
這種事情;看起來你期望有偶然的失蹤記錄,所以它缺少的記錄並不是真正的錯誤或意外情況。
你會得到什麼錯誤?代碼對我來說看起來不錯。 – mudasobwa
這是故意的。您應該使用404.html或在控制器中處理丟失的頁面。爲什麼你要顯示一個特定的頁面時,發現沒有發佈? –
對我來說也是如此;但是我的@ post = Post發生錯誤。find(params [:id]);所以我不能檢查是我的@post false或true –