Ruby on rails Rails 4.2.2当前用户为零
我最近在我的应用程序中安装了Desive gem。我试图在应用程序的视图中显示当前用户的电子邮件,但在我的视图中使用以下内容时:Ruby on rails Rails 4.2.2当前用户为零,ruby-on-rails,devise,Ruby On Rails,Devise,我最近在我的应用程序中安装了Desive gem。我试图在应用程序的视图中显示当前用户的电子邮件,但在我的视图中使用以下内容时: <% if user_signed_in? %> <div>Signed in as... <%= current_user.email %></div> <% end %> 当然,Rails控制台中的当前用户是nil 控制台处理请求时的上下文与服务器不同。控制台只是加载配置文件并启动应用程序-没有当前请
<% if user_signed_in? %>
<div>Signed in as... <%= current_user.email %></div>
<% end %>
当然,Rails控制台中的当前用户是nil 控制台处理请求时的上下文与服务器不同。控制台只是加载配置文件并启动应用程序-没有当前请求或会话-因此
当前用户的整个概念甚至不适用
当然,您可以通过实例化一个请求对象和围绕真实请求的所有其他环境来伪造它,但这是一种非常繁琐的一次性方法,可以通过实际功能、集成或验收测试更好地测试某些东西。这更有意义。我仍然可以理解,如果用户登录,当前的_user.email为什么会抛出错误。
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
rescue_from DeviseLdapAuthenticatable::LdapException do |exception|
render :text => exception, :status => 500
end
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
before_save :get_ldap_values
devise :ldap_authenticatable, :rememberable, :trackable, :validatable
def get_ldap_values
if self.username
self.email = Devise::LDAP::Adapter.get_ldap_param(self.username,"mail").first if Devise::LDAP::Adapter.get_ldap_param(self.username,"mail")
self.display_name = Devise::LDAP::Adapter.get_ldap_param(self.username,"displayName").first if Devise::LDAP::Adapter.get_ldap_param(self.username,"displayName")
end
end
end
undefined method `email' for nil:NilClass