29

Rails アプリの管理バックエンドとして ActiveAdmin を使用しています。基本的に、私はadmin_useruserモデルを持っています。

管理者アカウントから新しいユーザーを作成するときに、電子メールとパスワードを指定します。これで問題ありません。

次に、パスワードではなくユーザーの電子メールを変更したいとしましょう...ユーザーを更新するときにパスワードフィールドを空白にすることはできないため、これは実行できないようです。

ユーザーの更新中にフィールド (password および password_confirmation) が空白のままになっている場合、パスワードが変更されていないと見なす構成はどこかにありますか?

4

5 に答える 5

97

Devise の登録コントローラーをいじる必要はまったくありません。ActiveAdmin のリソース コントローラー内の空のパスワード フィールドは無視できます。

ActiveAdmin.register User do
  controller do

    def update
      model = :user

      if params[model][:password].blank?
        %w(password password_confirmation).each { |p| params[model].delete(p) }
      end

      super
    end
  end
end
于 2013-07-08T19:18:35.747 に答える
10

たとえば私の場合、「password_confirmation」に検証を適用するには、if ステートメントで password と password_confirmation を評価する必要があります。

#app/admin/user.rb
controller do
  def update
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank?
      params[:user].delete("password")
      params[:user].delete("password_confirmation")
    end
    super
  end
end


#app/model/user.rb
validates :name, :email, presence: true
validates :password, :password_confirmation, presence: true, on: :create
validates :password, confirmation: true

これにより、新しいユーザーを作成し、パスワードを変更せずに更新する場合にのみ、パスワードの存在を検証できます。

これは私にとってはうまくいきます。これが役立つことを願っています。

これがお役に立てば幸いです。

于 2014-03-05T15:35:40.010 に答える