2013-03-08 2 views
25

저는 레일즈 애플리케이션에서 ActiveAdmin을 관리 백엔드로 사용합니다. 기본적으로 admin_user 및 사용자 모델이 있습니다.ActiveAdmin : 사용자 비밀번호를 변경하지 않고 남겨 두는 방법은 무엇입니까?

관리자 계정에서 새 사용자를 만들 때 이메일과 비밀번호를 지정합니다. 확인되었습니다.

그럼 사용자의 이메일은 수정하고 비밀번호는 수정하지 않으려 고합니다 ... 사용자를 업데이트 할 때 비밀번호 입력란을 비워 둘 수 없기 때문에 불가능합니다.

사용자를 업데이트하는 동안 입력란 (password 및 password_confirmation)이 비어있는 경우 암호가 변경되지 않는 것으로 간주되는 구성이 있습니까?

+0

인증에 devise를 사용하고 있습니까? –

+0

'그럴 것 같니? ' 유효성 검사 오류가 발생합니까, 아니면 무엇입니까? – phoet

+0

예, 사용하고 있습니다. "그럴 것 같습니다"라는 말은 암호 필드를 비워 둘 수 없기 때문에 내가 할 수있는 방법을 찾지 못했음을 의미합니다. – 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을의 자원 제어기 내부에 빈 암호 필드를 무시할 수 있습니다 :

당신은 if 문에 비밀번호 password_confirmation을 평가할 필요가
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

, 내 경우에 대한 예 "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 

이 내가 자신의 비밀번호를 변경하지 않고 새 사용자 및 업데이트를 만들 때 나는 암호가 있는지 확인 할 수 있습니다.

이 작품 덕분에 도움이되기를 바랍니다.

도움이되기를 바랍니다.

관련 문제