2014-10-15 2 views
0

Я создал страницу «Новый/Редактировать пользователя», чтобы администратор мог добавлять и обновлять пользователей. Теперь я пытаюсь это сделать: когда Администратор редактирует пользователя, у администратора есть возможность не обновлять пароль, а только по электронной почте. Но как сохранить пароль после сохранения обновленного сообщения?Rails: Devise Admin Сохранить пароль при редактировании пользователя

Редактировать страницу:

<div><%= f.label :email, 'Email Address' %> 
    <%= f.email_field :email, autofocus: true, :class => "form-control", autocomplete: "off", :placeholder => "Enter email address" %></div><br /> 

    <div><%= f.label :password %> 
    <%= f.password_field :password, autocomplete: "off", :placeholder => "Enter password" %></div><br /> 

    <div><%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation, autocomplete: "off", :placeholder => "Confirm password" %></div><br /> 

Модель:

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

# Setup accessible (or protected) attributes for your model 
attr_accessible :email, :password, :password_confirmation 

Контроллер:

def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 

    if @user.update_attributes(params[:user]) 
    redirect_to edit_user_path 
    flash[:notice] = "User updated." 
    else 
    render :action => 'edit' 
    end 
    end 

ответ

0

Вы можете проверить, если поле пароля пустым или нет, если он пустой, чем использование Разрабатывают-х update_without_password метод, попробуйте это

def update 
    @user = User.find(params[:id]) 
    if params[:user][:password].blank? 
    if @user.update_without_password(params[:user].except(:password, :password_confirmation)) 
     redirect_to edit_user_path 
     flash[:notice] = "User updated." 
    else 
     render :action => 'edit' 
    end 
    else 
    if @user.update_attributes(params[:user]) 
     redirect_to edit_user_path 
     flash[:notice] = "User updated." 
    else 
     render :action => 'edit' 
    end 
    end 
end 
+1

Это работает! Спасибо тебе за это! :) – Gotchit

Смежные вопросы