我在我的Rails應用程序中使用ActiveAdmin作爲我的管理後端。基本上,我有一個admin_user和一個用戶模型。ActiveAdmin:如何保持用戶密碼不變?
當我從一個管理員帳戶創建一個新用戶時,我指定了一個電子郵件和一個密碼,沒關係。
比方說,我想要修改用戶的電子郵件,但不是密碼......看來這不能完成,因爲更新用戶時密碼字段不能爲空。
是否有配置的某處會認爲密碼未更改是在更新用戶時將字段(密碼和password_confirmation)留空?
我在我的Rails應用程序中使用ActiveAdmin作爲我的管理後端。基本上,我有一個admin_user和一個用戶模型。ActiveAdmin:如何保持用戶密碼不變?
當我從一個管理員帳戶創建一個新用戶時,我指定了一個電子郵件和一個密碼,沒關係。
比方說,我想要修改用戶的電子郵件,但不是密碼......看來這不能完成,因爲更新用戶時密碼字段不能爲空。
是否有配置的某處會認爲密碼未更改是在更新用戶時將字段(密碼和password_confirmation)留空?
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有關於此方法的更多信息,如果您感興趣。
是的,這是另一種方式來做到這一點http://stackoverflow.com/a/11676957/633742 – 2014-04-15 16:15:33
你並不真正需要的混亂在所有制定的登記控制器,你可以忽略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
您需要在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
這讓我只驗證密碼存在,當我創建一個新用戶,並更新不改變他的密碼。
這個工作對我來說,我希望這是有幫助的。
我希望這是有幫助的。
你使用devise進行身份驗證嗎? – 2013-03-08 11:15:24
「它似乎」是什麼意思?你會得到驗證錯誤,或者是什麼? – phoet 2013-03-08 13:18:09
是的,我使用設計。 「看起來」意味着我沒有找到辦法做到這一點,因爲密碼字段不能留空。 – Luc 2013-03-08 13:28:07