簡體   English   中英

ActiveAdmin - 在不更改密碼的情況下編輯設計用戶

[英]ActiveAdmin - Edit Devise user without changing password

我試着這樣做。 不幸的是我有覆蓋更新的問題,我不知道如何正確地做到這一點。 我在另一個地方這樣做的方式是:

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

所以我試圖覆蓋update

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

但它不起作用。 我仍然得到密碼輸入附近can't be blank 如何實現預期的行為?

我接受@anonymousxxx的答案並添加以下內容:

如果您正在使用rails admin,則可以覆蓋控制器“User”,如下所示:

#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

您還應注意,如果您具有用戶模型驗證,請指定何時應用此類驗證,例如:

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

這使我只有在創建新用戶並更新而不更改其密碼時才驗證密碼存在。

我希望這是有幫助的。

將此代碼添加到您的用戶模型中。 這將為你做到這一點。

# User.rb

private    
def password_required?
  new_record? ? super : false
end  

這對我有用:

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

要么

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

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM