undefined 方法 'email' for nil:nilClass



我正在使用devise,并试图迫使用户登录。签名后,我想检查他的电子邮件是否在工人表中找到。如果存在,请将他重定向到: /workers,否则将其重定向到 /tasksadmins

我尝试了:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :authenticate_user!
  before_filter :is_worker
  def is_worker
     @email = current_user.email
     tag = Worker.where(:email => @email)
     if tag.nil?
        redirect_to '/tasksadmins'
     else
        redirect_to '/workers'
     end
  end
end

但是我得到了:

undefined method `email' for nil:NilClass

update

我尝试了:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :authenticate_user!
  before_filter :is_worker
  def is_worker
    if user_signed_in?
       @email = current_user.try(:email)
      if @email && Worker.find_by_email(@email).nil?
        redirect_to '/tasksadmins'
      else
        redirect_to '/workers'
      end
    else
        redirect_to '/users/sign_in' # devise?
    end
  end
end

好吧,对不起...我刚刚注意到您已经更新了您的问题

#SessionsController
def after_sign_in_path_for(resource)
  return request.env['omniauth.origin'] || session[:user_return_to] || root_path
end

#Your controller
before_filter :user_return_to
before_filter :authenticate_user!
before_filter :is_worker
def is_worker
   @email = current_user.try(:email)
   if @email && Worker.find_by_email(@email).nil?
      redirect_to '/tasksadmins'
   else
      redirect_to '/workers'
   end
end
private
def user_return_to
  session[:user_return_to] = request.fullpath
end

的动态发现器.find_by_email 返回单个对象(首先匹配)或 nil 否则。

但是 .where()总是返回可以是空白*(空*)和的ar ::的关系, nil nil 。

* ar ::关系响应.blank?和.empty?将这些方法委派给了实际数组的集合。,因此代码:

tag = Worker.where(:email => @email)
if tag.nil?

将始终返回 false

如果用户未成功身份验证,则cuurent_user为nil。我假设您正在使用设计进行身份验证,我是否正确?

 def is_worker
     render :template => '/login' and return if current_user.nil?
     @email = current_user.email
     tag = Worker.where(:email => @email)
     if tag.nil?
        redirect_to '/tasksadmins'
     else
        redirect_to '/workers'
     end
  end

相关内容

最新更新