我遵循了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
应该是用户的电子邮件。我错过了什么?
答案 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
以及username
则username
等