Ruby Exception - 如果Statement rescue没有处理异常

时间:2012-03-31 16:38:11

标签: ruby-on-rails ruby exception rescue

我是大家,我在处理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

希望你能帮助我。

亲切, Aubin的

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这不起作用的唯一原因是ActiveRecord实际上找到了一行

User.find(session[:user_id])

尝试记录会话[:user_id]并使用SQL查看数据库。

另一方面,您可以使用

session[:user_id].nil?

而不是

session[:user_id] == nil

答案 2 :(得分: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