我相信你知道,這就像People.find(id)
,只是find
產生了一個錯誤。
但是,如果沒有找到記錄,則People.find_by_id(id)
返回nil,我懷疑這些記錄會照顧到您需要的所有內容。你不需要檢查你放入ActiveRecord的內容是否是正確的數據類型等;它處理SQL注入風險,因此提前檢查不會影響實際行爲。
如果我們只是希望在show
動作,不過,有一個更優雅的方式:而不是使用find_by_id
和檢查零,使用find
,讓一個錯誤的泡沫了,讓控制器捕獲它rescue_from
。 (默認情況下,在生產,ActiveRecord::RecordNotFound
將被捕獲並通過顯示一個通用的404救出,但如果需要,你可以自定義這種行爲。)
class UsersController < ApplicationController
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
def show
@user = User.find params[:id]
end
protected
def not_found
flash[:error] = "User not found"
redirect_to users_path
end
end
未測試的代碼,僅供參考)