ActiveAdmin - 在不更改密码的情况下编辑设计用户

时间:2013-05-17 13:16:37

标签: ruby-on-rails ruby devise passwords activeadmin

我试着这样做。不幸的是我有覆盖更新的问题,我不知道如何正确地做到这一点。我在另一个地方这样做的方式是:

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。如何实现预期的行为?

3 个答案:

答案 0 :(得分:17)

我接受@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

这允许我仅在创建新用户并更新而不更改其密码时验证密码存在。

我希望这有用。

答案 1 :(得分:11)

将此代码添加到您的用户模型中。这将为你解决问题。

# User.rb

private    
def password_required?
  new_record? ? super : false
end  

答案 2 :(得分:0)

这对我有用:

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

source