2013-03-08 55 views
25

我在我的Rails應用程序中使用ActiveAdmin作爲我的管理後端。基本上,我有一個admin_user和一個用戶模型。ActiveAdmin:如何保持用戶密碼不變?

當我從一個管理員帳戶創建一個新用戶時,我指定了一個電子郵件和一個密碼,沒關係。

比方說,我想要修改用戶的電子郵件,但不是密碼......看來這不能完成,因爲更新用戶時密碼字段不能爲空。

是否有配置的某處會認爲密碼未更改是在更新用戶時將字段(密碼和password_confirmation)留空?

+0

你使用devise進行身份驗證嗎? – 2013-03-08 11:15:24

+0

「它似乎」是什麼意思?你會得到驗證錯誤,或者是什麼? – phoet 2013-03-08 13:18:09

+0

是的,我使用設計。 「看起來」意味着我沒有找到辦法做到這一點,因爲密碼字段不能留空。 – Luc 2013-03-08 13:28:07

回答

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 – 2014-04-15 16:15:33

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 2013-07-09 07:22:41

+2

優雅!感謝分享。 – scarver2 2013-09-07 01:36:18

+2

我在哪裏可以找到這個文件?可以把它放在'config/initializers/rails_admin.rb'中嗎? – 2014-04-15 16:17:19

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 

這讓我只驗證密碼存在,當我創建一個新用戶,並更新不改變他的密碼。

這個工作對我來說,我希望這是有幫助的。

我希望這是有幫助的。