Ruby on Rails“未定义的方法`电子邮件'为nil:NilClass”

时间:2017-09-21 22:34:25

标签: ruby-on-rails ruby devise

我正在使用“Devise”,我想在学生仪表板中调用current_user.email。但我继续为nil:NilClass错误获取相同的“未定义方法`email'。

学生/ index.html.erb

<div class="student-index-header">
    <br><%= current_user.email %></br>
  <div class="student-index-header-text">
    <a class="student-index-header-text-sign-out" href="<%= destroy_user_session_path %>">Sign-out</a>
  </div>
</div>

student.rb

class Student < ApplicationRecord
  belongs_to :user, optional: true
  validates_presence_of :first_name, :last_name , :age, :description
end

user.rb

class User < ApplicationRecord
  has_one :tutor
  has_one :student

 # Include default devise modules. Others available are:
 # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

1 个答案:

答案 0 :(得分:0)

如果您的用户未登录,则设计为current_user返回 nil

试试这个:

<%= current_user.email if user_signed_in? %>

如果页面要求用户登录,您还应该将此行添加到控制器中(这会使if子句成为冗余,因为我们已经检查过用户是否已登录控制器) :

authenticate_user! unless user_signed_in?

您也可能希望在用户登录后将其重定向回此页面。要了解如何操作,请查看this answer.