1

Activeadmin を使用して新しいユーザーを作成しようとすると、Rails は次のエラーをスローします。

NoMethodError in Admin::UsersController#create
undefined method `email' for #<User:0x007fabb13db508>
Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"RS+AP9merlR5RxiKrPxM8Sx9CYEZGn7a4EJ6e25DL6Q=",
 "user"=>{"username"=>"user1",
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]"},
 "commit"=>"Create User"}

背景情報: Activeadmin をインストールし、デフォルトの admin_user リソースに加えて、Devise を使用してユーザー モデルを作成し、このユーザー モデルを Activeadmin リソースとして登録しました。ユーザーにメールではなくユーザー名を使用して認証してもらいたいので、次の移行を行いました。

def up
  add_column :users, :username, :string
  add_index :users, :username, unique: true, name: 'index_users_on_username', using: 'btree'
  remove_column :users, :email, :string
end

def down
  remove_column :users, :username, :string
  remove_index :users, :username
  add_column :users, :email, :string
end

私が設定したデバイスイニシャライザで:

config.authentication_keys = [ :username ]
config.case_insensitive_keys = [ :username ]
config.strip_whitespace_keys = [ :username ]

また、Activeadmin のログイン フォームとユーザー リソースのフォームを適切にカスタマイズしました。

ActiveAdmin.register User do
  index do
    column :username
    default_actions
  end

  filter :username

  form do |f|
    f.inputs "Admin Details" do
      f.input :username
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end

  controller do
    def permitted_params
      params.permit admin_user: [:username, :password, :password_confirmation]
    end
  end
end

これが Devise、Activeadmin、Postgres、または Rails の問題であるかどうかは判断できません。さらに、Admin::UsersController を探す場所がわかりません。どんな助けでも大歓迎です。

PS Rails コンソールで、新しいユーザーを作成します。

User.create(username: 'John', password: '123456', password_confirmation: '123456')

同様のエラーをスローします:

NoMethodError: undefined method `email' for #<User:0x007fabb6806da8>

更新 1:

@Sparda: これをユーザー モデル (app/models/user.rb の下) に追加しました。

def self.find_first_by_auth_conditions(warden_conditions)
  conditions = warden_conditions.dup
  if username = conditions.delete(:username)
    where(conditions).where(["lower(username) = :value", { :value => username.downcase }]).first
  else
    where(conditions).first
  end
end

サーバーを再起動しましたが、同じエラーがあります。

@Adeptus: add/admin/user.rb に 2 つのメソッドを追加しました。フォームに入力して Create user をクリックすると、ページが更新され、フォームのフィールドが消去され、パスワード フィールドの周りにフラッシュ エラーが表示されるだけですcan't be blank。ところで、私はすでにこの動作に遭遇していました。users テーブルのメール列を読み込もうとしましたが、同じことが起こりました。

4

1 に答える 1