2013-05-27 32 views
0

用戶的URL在我的應用程序RecordNotFound如下:的ActiveRecord ::手動更改URL

localhost:3000/users/1/dashboard 

當有人手動在URL改變user ID了一些不具有用戶asigned它給我的錯誤:

Couldn't find User with id=X. 

有沒有辦法將用戶返回到別的地方?

我試着在user_controller.rb是這樣的:

@user = User.find(params[:id]) 

unless @user 
    redirect_to root_path 
end 
+0

當你這樣做了什麼事?另外,我們可能需要查看更多包含該代碼的方法。 – dpassage

回答

3

是的,比如說:

def dashboard 
    begin 
    @user = User.find(params[:id]) 
    rescue ActiveRecord::RecordNotFound 
    redirect_to root_path 
    end 
end 

的ActiveRecord拋出一個異常,如果它不能找到一個紀錄,那就是爲什麼你的unless @user ...是徒勞的。

+0

太棒了,這個工程。謝謝! –

1

的另一種方式,而不需要resque的,就是用find_by_id,返回零,如果沒有找到記錄:

def dashboard 
    @user = User.find_by_id params[:id] 
    redirect_to root_path unless @user 
end 
+0

這是不正確的,find_by _...方法不被棄用。 http://edgeguides.rubyonrails.org/4_0_release_notes.html#active-record –

+0

感謝您的糾正,我把它與find_all_by方法混合在一起。我解決了我的問題。 –