Ruby Exception - если оператор спасения не обрабатывает исключение - PullRequest
0 голосов
/ 31 марта 2012

Я все, у меня есть проблемы с обработкой исключений в ruby.Я не понимаю, почему мое заявление не работает.

Ошибка: не удалось найти пользователя с 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

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

Сердечно, Обин

Ответы [ 3 ]

0 голосов
/ 31 марта 2012

Единственная причина, по которой это не работает, в том, что ActiveRecord фактически находит строку

User.find(session[:user_id])

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

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

session[:user_id].nil?

вместо

session[:user_id] == nil
0 голосов
/ 31 марта 2012

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

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
0 голосов
/ 31 марта 2012
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

конец

...