2013-05-17 33 views
5

私はそれを試みます。残念ながら、私はアップデートを無効にすることに問題があり、それを正しく行う方法はわかりません。ActiveAdmin - パスワードを変更せずにDeviseユーザーを編集する

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を取得します。期待される行動を達成するには?

答えて

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

+0

私の解決策も、 'validates:password、:presence => true'を削除しても動作します。私は、デバイスの検証が十分であると仮定します。 – ciembor

9

。これはあなたのためのトリックを行います。

# User.rb 

private  
def password_required? 
    new_record? ? super : false 
end 
+4

答えとしてフラグを付ける必要があります – phyzalis

16

私は@anonymousxxxの答えを取ると、次の行を追加します。

あなたはレールの管理を使用している場合は、次のように、あなたはコントローラ「ユーザー」を上書きすることができます:

#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 
0:また、あなたはUserモデルの検証を持っている場合は、例えば、検証が適用されたときに指定し、それを注意してください

これにより、新しいユーザーを作成し、パスワードを変更せずに更新する場合にのみ、パスワードの存在を検証できます。

私はこれが役に立ちそうです。

関連する問題