5

私のセットアップ - Rails 4、ActiveAdmin、Devise で生成されたユーザー モデル。ユーザーはユーザー名で認証され、電子メール属性はありません。Devise は電子メール属性に大きく依存しているため、最後に言及しているため、これが問題に関係している可能性があります。私の正確なセットアップとコードは、このブログ投稿で説明されています。

ActiveAdmin バックエンドで、ユーザー -> 新しいユーザー -> ユーザー名、パスワード、パスワードの確認を入力 -> ユーザーの作成に移動します。新しいユーザーを作成する代わりに、[新しいユーザー] フォームが消去され、[パスワード] フィールドの下にエラーが表示されますcan't be blank。Rails コンソールに移動し、新しいユーザーを手動で作成するUser.create(username: 'Joe', password: 'password', password_confirmation: 'password')と、すべてが機能し、ユーザーは でログインできますlocalhost:3000/users/sign_in

私はこのSOの質問を見ました。User モデルに追加すると:

def password_required?
  new_record? ? false : super
end

新しいユーザーを作成できますが、すべてのフィールド (ユーザー名、暗号化されたパスワードを含む) が空白です。

更新レジェが示唆するように、私は自分のコードを投稿しています。私は Devise と Activeadmin の組み込みコントローラーを使用しているので、ユーザー リソースのコードを Activeadmin と私の db スキーマに投稿することだけが理にかなっていると思います。

Activeadmin のユーザー リソース:

ActiveAdmin.register User do
  # This determines which attributes of the User model will be displayed in the index page. I have left only username, but feel free to uncomment the rest of the lines or add any other of the User attributes.
  index do
    column :username
    # column :current_sign_in_at
    # column :last_sign_in_at
    # column :sign_in_count
    default_actions
  end

  # Default is :email, but we need to replace this with :username
  filter :username

  # This is the form for creating a new user using the Admin backend. If you have added additional attributes to the User model, you need to include them here.
  form do |f|
    f.inputs "User Details" do
      f.input :username
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end

  # This is related to Rails 4 and the changes it introduced in handling strong parameters. Here we replace :email with :username.
  controller do
    def permitted_params
      params.permit admin_user: [:username, :password, :password_confirmation]
    end
  end
end

スキーマ.rb:

ctiveRecord::Schema.define(version: 20131031102826) do

  create_table "active_admin_comments", force: true do |t|
    t.string   "namespace"
    t.text     "body"
    t.string   "resource_id",   null: false
    t.string   "resource_type", null: false
    t.integer  "author_id"
    t.string   "author_type"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "active_admin_comments", ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id"
  add_index "active_admin_comments", ["namespace"], name: "index_active_admin_comments_on_namespace"
  add_index "active_admin_comments", ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id"

  create_table "admin_users", force: true do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "admin_users", ["email"], name: "index_admin_users_on_email", unique: true
  add_index "admin_users", ["reset_password_token"], name: "index_admin_users_on_reset_password_token", unique: true

  create_table "users", force: true do |t|
    t.string   "username",               default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  add_index "users", ["username"], name: "index_users_on_username", unique: true

end

他のコードはこちらから入手できます。

4

1 に答える 1

6

問題は、モデルpermitted_paramsを処理する ActiveAdmin ページのメソッドにあると思います。User

params.permit admin_user: [:username, :password, :password_confirmation]

これが実際にUserモデルである場合、行は次のようになります。

params.permit user: [:username, :password, :password_confirmation]

これは、あなたが説明したシムトムに適合します。送信後の空のフォームと、コンソールですべてが適切に機能することです。

于 2013-11-04T11:05:50.733 に答える