Ruby on Rails - 在函数中执行find_by_email的结果与控制台不同



我是Rails的新手,目前正在从 http://ruby.railstutorial.org/chapters/modeling-and-viewing-users-one#top 的教程中学习

但是,当我在User.authenticate("test@test.com","testing")上执行find_by_email时,find_by_email在控制台上工作我得到一个零返回

我哪里可能出错了?

以下是我的模型User.rb的部分代码

class User < ActiveRecord::Base
  attr_accessor   :password
  attr_accessible :name, :email, :password, :password_confirmation
  email_regex = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
  validates :name,     :presence      => true, 
                       :length        => { :maximum => 50 }
  validates :email,    :presence      => true,
                       :format        => { :with => email_regex },
                       :uniqueness    => { :case_sensitive => false }
  validates :password, :presence      => true,
                       :confirmation  => true,
                       :length        => { :within => 6..40 }
  before_save :encrypt_password
  # Return true if the user's password matches the submitted password.
  def has_password?(submitted_password)
    # Compare encrypted_password with the encrypted version of
    # submitted_password.
    encrypted_password == encrypt(submitted_password)
  end
  def self.authenticate(email, submitted_password) 
    user = find_by_email(email)
    return nil if user.nil?
    # return nil if user.has_password?(submitted_password)
  end

我已经在 rails 控制台上尝试了 User.find_by_email("test@test.com"),结果返回了本地数据库中的记录。

这实际上是身份验证方法的问题。 Ruby 始终返回它在方法中执行的最后一行的值。 由于方法中的最后一行是:

return nil if user.nil?

这与

if user.nil?
  return user
end

当用户正确时,if 中的代码不会被执行,但之后仍然没有返回值,因此 authenticate 无论如何都会返回 nil。 我会尝试这个而不是你的return nil if user.nil?行:

return user if user

或者,如果您更喜欢显式:

return user unless user.nil?

甚至更明确:

return user.nil? ? nil : user

只要您明确返回用户作为最后一行,我认为一切都应该没问题。

相关内容

  • 没有找到相关文章

最新更新