ruby-on-rails - rails 动态 find_by 方法在类方法中不起作用

标签 ruby-on-rails

我有一个用户模型,其中包含身份验证方法。

如果我在 Rails 控制台中使用模型进行测试,可以很好地创建用户,然后我可以在电子邮件中进行查找并像这样完美地返回用户。

user = User.find_by_email("someaddress@email.com")

现在,如果我尝试像这样调用身份验证方法并返回用户,我的身份验证方法中的 puts user 语句将返回 nil

user = User.authenticate("someaddress@email.com", "foobar")

模型看起来像这样

  class User < ActiveRecord::Base

  attr_accessor   :password
  attr_accessible :first_name, :last_name,
                  :email, :birth_date, :sex,
                  :password, :password_confirmation


  def self.authenticate(email, submitted_password) 
    user = find_by_email(email) 

    puts user  #this returns nil so my class is never able to authenticate the user

    return nil if user.nil? 
    return user if user.has_password?(submitted_password)
  end

end

我不知道问题是什么。一些对此问题有所了解的人将不胜感激。

最佳答案

您在 Class 方法中使用 find_by 方法的方式很好;应该可以。

您确定 nil 输出来自 puts 吗? nil 可能是您方法的输出。 user.has_password? 可能有错误。

代替puts,试试:

p user

...只是为了确定。

关于ruby-on-rails - rails 动态 find_by 方法在类方法中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299603/

相关文章:

ruby-on-rails - 设计 token 身份验证 - 安装设计 token 身份验证后无法创建用户帐户

ruby-on-rails - 如何基于正则表达式执行事件记录搜索

ruby-on-rails - form_for 为 :slug instead of :id

ruby-on-rails - Rails 应用逻辑国际化

ruby-on-rails - 在 routes.rb 上为 Ruby on Rails 的根设置可选参数

ruby-on-rails - 查找在一周中的特定日期创建的所有记录

ruby-on-rails - Heroku上的Searchkick无法正常工作

ruby-on-rails - Rails - 如何对每个方法执行一个方法调用,就像 Controller 对 `render` 所做的那样

sql - 如何清理 Rails API 参数

ruby-on-rails - Ruby on Rails 中链接对象的 Lambda 条件