2012-03-31 3 views
-1

У меня есть проблема с обработкой исключения в ruby. Я не понимаю, почему мое заявление не работает.Ruby Exception - If Statement rescue не обрабатывает исключение

Ошибка: Не удалось найти пользователя с id = 14 Я хочу перенаправить на страницу входа.

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 

Надеюсь, вы можете мне помочь.

сердечным приветом, Аубин

+0

Unrelated, но IMO возвращения 'nil' здесь вводит в заблуждение. –

ответ

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 

конец

+0

Этот код не работает. У меня все еще есть исключение: ActiveRecord :: RecordNotFound in TasksController # index - Не удалось найти пользователя с id = 14. Я не знаю, как обрабатывать это исключение .. – Fassbender

+0

, если вы используете User.find в действии индекса TasksController, тогда используйте User.find_by_id (session [: user_id]), как показано выше. –

+0

Знаете ли вы, что find_by_id не обрабатывает исключение RecordNotFound? – Fassbender

0

Единственная причина для этого, чтобы не работать в том, что ActiveRecord на самом деле найти строку

User.find(session[:user_id]) 

Попробуйте войти сессии [: user_id ] и поиск в БД с использованием SQL.

На другой ноте, вы можете использовать

session[:user_id].nil? 

вместо

session[:user_id] == nil 
+0

В SQL выберите * от пользователей, где id = 15 ничего не возвращает. И с моим кодом ActiveRecord :: RecordNotFound в TasksController # index - Не удалось найти пользователя с id = 14. Thx для ноль. – Fassbender

+0

, так что в вашем TasksController # index вы можете предоставить этот код. – Nilesh

0

Я хотел бы переписать метод следующим образом:

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 
Смежные вопросы