Ruby on rails “如何拥有”;当前用户;(编码为'session[:user_id]`)显示用户电子邮件,而不是一些奇怪的代码?

Ruby on rails “如何拥有”;当前用户;(编码为'session[:user_id]`)显示用户电子邮件,而不是一些奇怪的代码?,ruby-on-rails,forms-authentication,Ruby On Rails,Forms Authentication,我遵循了关于Rails表单(登录、注销)的教程。除了这一点,一切都进行得很顺利:一旦用户登录,页面底部应该说“You is loggin as”,然后是一个电子邮件地址,例如,它会说“You is loggin as”Jane@aol.com". 负责此操作的代码行: 您的登录身份为: 但是,我得到的是您的登录身份为:#(不是一份完全相同的副本) 就我的一生而言,我不知道这个数字是多少,也不知道为什么用户的电子邮件没有显示,也不知道从哪里开始排除故障: 当前用户在ApplicationContr

我遵循了关于Rails表单(登录、注销)的教程。除了这一点,一切都进行得很顺利:一旦用户登录,页面底部应该说“You is loggin as”,然后是一个电子邮件地址,例如,它会说“You is loggin as”Jane@aol.com". 负责此操作的代码行:

您的登录身份为:

但是,我得到的是
您的登录身份为:#
(不是一份完全相同的副本)

就我的一生而言,我不知道这个数字是多少,也不知道为什么用户的电子邮件没有显示,也不知道从哪里开始排除故障:

当前用户
在ApplicationController中定义:

class ApplicationController
def身份验证\u必需
如果!你登录了吗?
重定向到登录路径
结束
结束

def是否已登录?
!!当前用户
结束

def当前用户
@当前用户| |=开始
如果会话[:User\u id],则查找(会话[:User\u id])
结束
结束
助手\u方法:当前\u用户
结束


用户id
应该是用户的电子邮件。我错过了什么?

只要将您的登录名改为:

,您的登录名为:

。您当前看到的
#
只是用户对象本身的表示

只需将
您的登录名:

更改为
您的登录名:

。您当前看到的
#
只是用户对象本身的表示

您应该指定希望从当前用户获得的内容,如下所示:

<p>You are logged in as: <%= @current_user.email %></p>
您以以下身份登录:


如果不指定,Rails只会抛出当前用户是什么。

您应该指定希望当前用户是什么,如下所示:

<p>You are logged in as: <%= @current_user.email %></p>
您以以下身份登录:


如果您不指定,Rails将抛出当前用户是什么。

首先,您的一些代码似乎是错误的

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :authentication_required

  def authentication_required
    redirect_to login_path if !logged_in?
  end

  def logged_in? 
    current_user.present?
  end

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
  end
  helper_method :current_user
end
class ApplicationController
您正在创建一个助手方法,因此不需要调用
@current\u user
,只需调用
current\u user

另外,
会话[:user\u id]
不是
电子邮件。它是ID。您正在使用它查找具有
user.find(会话[:user\u ID])
的用户。这与
User.find(1)
相同

#
是对您分配给
@current_user
的用户对象的引用,数字是内存中存储该对象的空间


您只需调用要为登录用户显示的方法。如果
email
那么
email
如果
username
那么
username
等等,首先你的一些代码似乎是错误的

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :authentication_required

  def authentication_required
    redirect_to login_path if !logged_in?
  end

  def logged_in? 
    current_user.present?
  end

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
  end
  helper_method :current_user
end
class ApplicationController
您正在创建一个助手方法,因此不需要调用
@current\u user
,只需调用
current\u user

另外,
会话[:user\u id]
不是
电子邮件。它是ID。您正在使用它查找具有
user.find(会话[:user\u ID])
的用户。这与
User.find(1)
相同

#
是对您分配给
@current_user
的用户对象的引用,数字是内存中存储该对象的空间


您只需调用要为登录用户显示的方法。如果
电子邮件
那么
电子邮件
如果
用户名
那么
用户名
等等

谢谢!我试图找出当前用户的问题的原因是:教程演示了安全登录/注销以及如何保持某些信息的私密性(或防止黑客攻击)-因此,当前用户是
而不是
user.email
(老实说,我还没有学到足够的知识来理解这一切)。本教程将显示登录用户的电子邮件。无论如何,该电子邮件将仅显示给登录用户,因为所需的before_操作:authentication_将重定向任何未登录的用户。谢谢!我试图找出当前用户的问题的原因是:教程演示了安全登录/注销以及如何保持某些信息的私密性(或防止黑客攻击)-因此,当前用户是
而不是
user.email
(老实说,我还没有学到足够的知识来理解这一切)。本教程将显示登录用户的电子邮件。无论如何,该电子邮件将仅显示给登录用户,因为所需的before_操作:authentication_将重定向未登录的任何用户。