如何拥有" current_user" (编码为`session [:user_id]`)显示用户电子邮件,而不是一些奇怪的代码?

时间:2016-07-23 04:49:43

标签: ruby-on-rails forms-authentication

我遵循了Rails表单(登录,注销)的教程。一切顺利,除了这一点:一旦用户登录,页面底部应该说"你登录为"然后是一个电子邮件地址,所以它会说,例如,"您以Jane@aol.com"登录。代码行负责:

<p>You are logged in as: <%= @current_user %></p>

然而,我得到的是You are logged in as: #<User:000s500r00k000h0>(不是精确副本)

对于我的生活,我无法弄清楚这个号码是什么以及用户的电子邮件无法显示的原因 - 也不知道从哪里开始排除故障:

current_user在ApplicationController中定义:

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

def authentication_required if !logged_in? redirect_to login_path end end

def logged_in? !!current_user end

def current_user @current_user ||= begin User.find(session[:user_id]) if session[:user_id] end end helper_method :current_user end

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

3 个答案:

答案 0 :(得分:1)

只需将<p>You are logged in as: <%= @current_user %></p>更改为<p>You are logged in as: <%= @current_user.user_id %></p>即可。您目前看到的#<User:000s500r00k000h0>只是User对象本身的表示。

答案 1 :(得分:1)

您应该从@current_user中指定您想要的内容:

<p>You are logged in as: <%= @current_user.email %></p>

如果你没有指定,Rails就会抛弃 @current_user

答案 2 :(得分:1)

首先,你的一些代码似乎错了

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

您正在创建帮助方法,因此您无需致电@current_user,只需致电current_user

此外,session[:user_id]不是email。这是身份证。您正在使用它来查找User.find(session[:user_id])的用户。这与User.find(1)相同。

#<User:000s500r00k000h0>是对您分配给@current_user的用户对象的引用,数字是存储它的内存空间。

您需要做的就是调用您要为登录用户显示的方法。如果email然后email以及usernameusername