以管理员身份登录时,ActiveAdmin :: Devise :: Sessions中的NoMethodError为#new

时间:2018-04-02 17:32:14

标签: ruby-on-rails ruby devise activeadmin

我正在使用ActvieAdmin作为我应用的后端。

我做了以下更改,让我的用户使用他们的username注册他们的帐户。

config/initializers/devise.rb我改变了config.authentication_keys = [:username]

然后我将以下行添加到user.rb模型

validates :email,uniqueness: true 
validates :username,uniqueness: true

然后我创建了迁移rails generate migration add_username_to_users username:string:uniq,然后rake db:migrate

然后最后我修改了设计视图以显示:username

我现在可以用用户名

的用户身份登录

但我无法再登录ActiveAdmin了。我收到此错误消息

NoMethodError in ActiveAdmin::Devise::Sessions#new

Showing /Users/dadi/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activeadmin-1.2.1/app/views/active_admin/devise/sessions/new.html.erb where line #8 raised:

undefined method `username' for #<AdminUser id: nil, email: "", created_at: nil, updated_at: nil>

我不确定如何让ActiveAdmin log_in再次运行。 谁能帮我这个?

1 个答案:

答案 0 :(得分:0)

假设您正在使用具有Devise(AdminUserUser)的多个模型,如果更改设计初始化程序配置中的authentication_keys,它将为这两个模型强加规则。由于username明显缺少AdminUser属性,因此此方法对您无效。

如果您要对 admin_users with email 用户名为进行身份验证,则需要添加authentication_keys以及其他设计选项各个模型而不是初始化程序如下:

# AdminUser
class AdminUser < ApplicationRecord
  ...
  devise :database_authenticatable,..., authentication_keys: [:email]
  ...
end

# User
class User < ApplicationRecord
  ...
  devise :database_authenticatable,..., authentication_keys: [:username]
  ...
end

如果您想为这两种类型的用户提供任意电子邮件/用户名,则可以follow this link