2012-03-31 12 views
-1

Ich alle, ich habe ein Problem mit der Behandlung von Ausnahme in Ruby. Ich verstehe nicht, warum meine Aussage nicht funktioniert.Ruby-Ausnahme - Wenn Statement-Rescue keine Ausnahme behandelt

Fehler: Benutzer mit ID = 14 konnte nicht gefunden werden Ich möchte auf die Anmeldeseite umleiten.

def login_required 
    begin 
     if session[:user_id] == nil 
     redirect_to login_path, :notice => "You are not logged" 
     elsif User.find(session[:user_id]) 
     return nil 
     end 
    rescue ActiveRecord::RecordNotFound 
     redirect_to login_path, :notice => "No user corresponding in database" 
    end 
    end 

Hoffe, du kannst mir helfen.

Herzlichst, Aubin

+0

Unrelated, aber IMO 'Zurückkehren hier nil' ist irreführend. –

Antwort

0
def login_required 
    begin 
    if session[:user_id] == nil 
    redirect_to login_path, :notice => "You are not logged" 
    elsif User.find_by_id(session[:user_id]).nil? 
    #rescue ActiveRecord::RecordNotFound (use if u want to use User.find) 
    redirect_to login_path, :notice => "No user corresponding in database" 
    return nil 
    end 

end 

Ende

+0

Dieser Code funktioniert nicht. Ich habe immer noch eine Ausnahme: ActiveRecord :: RecordNotFound in TasksController # index - Konnte nicht Benutzer mit ID = 14 finden. Ich weiß nicht, wie diese Ausnahme behandelt wird. – Fassbender

+0

Wenn Sie User.find in der Indexaktion von TasksController verwenden, verwenden Sie User.find_by_id (session [: user_id]) wie oben gezeigt. –

+0

Wussten Sie, dass find_by_id die Ausnahme RecordNotFound nicht behandelt? – Fassbender

0

Der einzige Grund dafür nicht funktionieren wird, dass Active tatsächlich

User.find(session[:user_id]) 

versuchen, eine Zeile zu finden, um die Sitzung [Anmeldung: user_id ] und mit SQL in die DB schauen.

Auf einer anderen Anmerkung, können Sie

session[:user_id].nil? 

statt

session[:user_id] == nil 
+0

In SQL wählen Sie * von Benutzern, wo id = 15 nichts zurückgeben. Und mit meinem Code ActiveRecord :: RecordNotFound in TasksController # index - Konnte Benutzer mit id = 14 nicht finden. Danke für die Null Tipps. – Fassbender

+0

so was ist in Ihrem TasksController # index können Sie diesen Code bereitstellen. – Nilesh

0

verwenden würde ich Ihre Methode wie folgt umschreiben:

def login_required 

return redirect_to(login_path, 
    :notice => "You are not logged") if session[:user_id].blank? 

user = User.find_by_id(session[:user_id]) 
return user if user.present? 
redirect_to login_path, :notice => "No user corresponding in database" 
end 
Verwandte Themen