2013-03-08 5 views
25

私は、私の管理アプリケーションのバックエンドとしてActiveAdminを使用しています。基本的には、admin_userとユーザーモデルがあります。ActiveAdmin:ユーザーパスワードを変更しないでおく方法

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

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

ユーザの更新中にフィールド(パスワードとパスワード確認)が空白になっていると思われる設定がありますか?

+0

あなたは認証にdeviseを使用していますか? –

+0

「それはどういう意味ですか?検証エラーが出るのですか、それとも何ですか? – phoet

+0

はい、私はdeviseを使用します。パスワードフィールドを空白にすることはできないので、私はそれを行う方法が見つからないことを意味します。 – Luc

答えて

20

Deviseには、パスワードを入力しないでユーザーを更新するときに使用できるupdate_without_passwordメソッドがあります。この方法を使用すると、ActiveAdminユーザーコントローラで更新メソッドをカスタマイズできます。

def update 
    @user = User.find(params[:id]) 
    if params[:user][:password].blank? 
    @user.update_without_password(params[:user]) 
    else 
    @user.update_attributes(params[:user]) 
    end 
    if @user.errors.blank? 
    redirect_to admin_users_path, :notice => "User updated successfully." 
    else 
    render :edit 
    end 
end 

Devise Wikiに興味のある方は、この方法に関する詳細情報があります。

+0

はい、これを行う別の方法があります。http://stackoverflow.com/a/11676957/633742 –

85

あなたは本当にあなたがActiveAdminのリソースコントローラ内部の空のパスワードフィールドを単に無視することができ、考案者の登録コントローラーと全く混乱する必要はありません。

ActiveAdmin.register User do 

    controller do 

    model = :user 

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

    super 

    end 

end 
+1

あなたの権利は、これはおそらくよりクリーンでローカライズされたものです。 – Luc

+2

エレガント!共有してくれてありがとう。 – scarver2

+2

このファイルはどこにありますか? 'config/initializers/rails_admin.rb'に入れても構いませんか? –

9

あなたはif文でパスワードとpassword_confirmationを評価する必要があり、私の場合のために、たとえば「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 

これは私が自分のパスワードを変更することなく、新しいユーザーや更新を作成するときに私はパスワードのみの存在を確認することができます。

私にとってこの作品は、これが役に立ちそうです。

私はこれが役に立ちそうです。

関連する問題