ruby-on-rails - #<ActiveRecord::Relation []> 的未定义方法 `authenticate'

标签 ruby-on-rails

我创建了一个方法“attempt_login”,如下所示:

def attempt_login
  if params[:username].present? && params[:password].present?
      found_user= AdminUser.where(:username=> params[:username].first)
  if found_user
    authorized_user= found_user.authenticate(params[:password])
  end
end
if authorized_user
  flash[:notice]="You are now logged in."
  redirect_to(:action=>'menu')
else
   flash[:notice]="Invalid username/password combination."
   redirect_to(:action=>'login')
  end
end

我收到这样的错误:

 ←[1m←[35mAdminUser Load (1.0ms)←[0m  SELECT `admin_users`.* FROM `admin_users`
  WHERE `admin_users`.`username` = 'u'
Completed 500 Internal Server Error in 18ms

NoMethodError (undefined method `authenticate' for #<ActiveRecord::Relation []>)
:
  app/controllers/access_controller.rb:13:in `attempt_login'

它可以从 Rails 控制台运行,但不能从 Rails 服务器运行。 请告诉我解决方案,我正在等待您的回复。

最佳答案

您的代码中有错误,如下:

found_user = AdminUser.where(:username => params[:username].first)

应该是:

found_user = AdminUser.where(:username => params[:username]).first

查看日志:

SELECT `admin_users`.* FROM `admin_users`
WHERE `admin_users`.`username` = 'u'

params[:username].firstparams[:username] 返回第一个字符,但您需要第一个记录:

AdminUser.where(:username=> params[:username]).first

关于ruby-on-rails - #<ActiveRecord::Relation []> 的未定义方法 `authenticate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25030431/

相关文章:

ruby-on-rails - 在使用 capybara 进行集成测试时,在 rspec 中使用 mocha 模拟 api 调用

ruby-on-rails - Rails 5 - 如何将 Controller 中整个 jsonb postgres 列的参数列入白名单?

ruby-on-rails - 带空字符串的 pg_search_scope

ruby-on-rails - 带有实例变量的 ruby​​ on rails redirect_to

javascript - 如何在 Backbone View 中访问 Rails 配置信息?

mysql - 如何关联已连接表中的记录? - ruby on Rails

ruby-on-rails - 以用户为单位设置Active Resource HTTP身份验证是否安全?

ruby-on-rails - Rails 预编译index.html.erb

ruby-on-rails - Ruby 从数组中计算总和

ruby-on-rails - 未初始化的常量 ApplicationRecord