2013-03-08 14 views
25

Używam ActiveAdmin jako mojego zaplecza administracyjnego w mojej aplikacji rails. Zasadniczo mam admin_user i model użytkownika.ActiveAdmin: jak pozostawić hasło użytkownika bez zmian?

Po utworzeniu nowego użytkownika z konta administratora, określam adres e-mail i hasło, co jest dopuszczalne.

Załóżmy, że chcę zmienić adres e-mail użytkownika, ale nie hasło ... wydaje się, że nie można tego zrobić, ponieważ pole hasła nie może być puste podczas aktualizacji użytkownika.

Czy istnieje jakaś konfiguracja, w której hasło jest niezmienione, to czy pola (hasło i hasło) nie są puste podczas aktualizacji użytkownika?

+0

Czy używasz narzędzia do uwierzytelniania? –

+0

co oznacza "wydaje się"? otrzymujesz błędy sprawdzania poprawności, lub co? – phoet

+0

Tak, używam urządzenia. "Wygląda na to" oznacza, że ​​nie znalazłem sposobu, aby to zrobić, ponieważ pole hasła nie może być puste. – Luc

Odpowiedz

20

Program Devise udostępnia metodę update_without_password, której można użyć podczas aktualizowania użytkownika, jeśli nie zostanie wprowadzone żadne hasło. Przy użyciu tej metody można dostosować metodę aktualizacji do kontrolera użytkowników 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 ma więcej informacji na temat tej metody, jeśli twój zainteresowany.

+0

Tak, a tutaj jest inny sposób na zrobienie tego http://stackoverflow.com/a/11676957/633742 –

85

Tak naprawdę nie trzeba bałagan w ogóle ze sterownikiem rejestracji opracować, można po prostu zignorować pustych pól haseł wewnątrz kontrolera zasobów ActiveAdmin za:

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

Masz rację, to prawdopodobnie znacznie czystsze i zlokalizowane. – Luc

+2

Elegancki! Dziękuję za udostępnienie. – scarver2

+2

Gdzie mogę znaleźć ten plik? czy to jest ok, aby umieścić go w 'config/initializers/rails_admin.rb'? –

9

Trzeba ocenić hasło i password_confirmation w if, stosować walidacji na „password_confirmation”, np dla mojego przypadku:

#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 

pozwala mi to potwierdzić obecność hasło tylko podczas tworzenia nowego użytkownika i aktualizacji bez zmiany jego hasło.

Ta praca dla mnie, mam nadzieję, że jest to pomocne.

Mam nadzieję, że to będzie pomocne.

Powiązane problemy