2013-05-17 7 views
5

Ich versuche, das zu tun. Leider habe ich Probleme mit der Aktualisierung und ich weiß nicht, wie ich das richtig machen soll. So wie ich das tun, an einem anderen Ort ist:ActiveAdmin - Bearbeiten Devise Benutzer ohne Passwort zu ändern

if params[:user][:password].blank? 
    params[:user].delete("password") 
    params[:user].delete("password_confirmation") 
end 
# ... 
user.save! 

Also habe ich versucht update

def update 
    if params[:user][:password].blank? 
    params[:user].delete("password") 
    params[:user].delete("password_confirmation") 
    end 
    super 
end 

Aber es hat nicht funktioniert außer Kraft zu setzen. Ich bekomme immer noch can't be blank in der Nähe der Passworteingabe. Wie erreiche ich das erwartete Verhalten?

Antwort

0

Dies ist für mich funktioniert:

def update 
    @user = User.find(current_user.id) 
    params[:user].delete(:current_password) 
    if @user.update_without_password(params[:user]) 
     redirect_to .... 
    else 
     render .... 
    end 
end 

oder

def update 
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 
     params[:user].delete(:password) 
     params[:user].delete(:password_confirmation) 
    end 
    super 
end 

source

+0

Meine Lösung funktioniert auch, nach der Entfernung von "validiert: Passwort,: Präsenz => wahr". Ich nehme an, dass die Validierungen des Geräts ausreichen. – ciembor

9

diesen Code in Ihr Benutzermodell. Dies wird den Trick für Sie tun.

# User.rb 

private  
def password_required? 
    new_record? ? super : false 
end 
+4

Sollte als Antwort markiert sein – phyzalis

16

Ich nehme die Antwort von @anonymousxxx und fügen Sie die folgenden Schritte aus:

Wenn Sie Schienen Admin verwenden, können Sie den Controller "User" außer Kraft setzen, wie folgt:

#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 

Sie sollten auch beachten, dass Sie bei Verwendung der Benutzermodellvalidierungen angeben müssen, wenn solche Validierungen angewendet werden, z. B .:

validates :name, :email, presence: true 
validates :password, :password_confirmation, presence: true, on: :create 
validates :password, confirmation: true 

Dadurch kann ich die Anwesenheit des Passworts nur dann überprüfen, wenn ich einen neuen Benutzer erstelle und aktualisiere, ohne sein Passwort zu ändern.

Ich hoffe, das ist hilfreich.

Verwandte Themen