ActiveAdmin: comment laisser le mot de passe utilisateur inchangé?

J'utilise ActiveAdmin comme backend d'administration dans mon application rails. En gros, j'ai un utilisateur_admin et un modèle d'utilisateur.

quand je crée un nouvel utilisateur à partir d'un compte administrateur, je spécifie un email et un mot de passe, c'est ok.

disons que je veux modifier l'email de l'utilisateur, mais pas le mot de passe... il semble que cela ne puisse pas être fait car le champ Mot de passe ne peut pas être vide lors de la mise à jour d'un utilisateur.

y a-t-il une configuration quelque part qui considérerait que le mot de passe est inchangé les champs (password et password_confirmation) sont-ils laissés vides lors de la mise à jour d'un utilisateur ?

25
demandé sur Luc 2013-03-08 14:50:37
la source

3 ответов

la Devise fournit un update_without_password méthode que vous pouvez utiliser lors de la mise à jour d'un utilisateur si aucun mot de passe n'est entré. En utilisant cette méthode, vous pouvez personnaliser la méthode de mise à jour dans votre contrôleur utilisateur 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

Concevoir Wiki a plus d'informations sur cette méthode si vous êtes intéressés.

20
répondu rocket scientist 2013-03-09 06:11:33
la source

Vous n'avez pas vraiment besoin de tout gâcher avec le controller D'enregistrement de Devise, vous pouvez simplement ignorer les champs de mot de passe vides à L'intérieur du Controller de ressources D'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
88
répondu mauriciomdea 2017-03-13 14:34:41
la source

vous devez évaluer password et password_confirmation dans la déclaration if, pour appliquer les validations sur "password_confirmation", par exemple pour mon cas:

#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

cela me permet de valider la présence de mot de passe seulement lorsque je crée un nouvel utilisateur et de mettre à jour sans changer son mot de passe.

Ce travail pour moi, j'espère que cela est utile.

j'espère que cela est utile.

10
répondu calrrox 2014-03-05 19:35:40
la source

Autres questions sur