У меня есть форма с полями password, password_confirmation и current_password, и когда я пытаюсь ее обновить, он не изменяет пароль в db. Я только хочу обновить пароль с помощью текущего пароля и обновить другие поля, такие как имя, адрес электронной почты и фамилию без текущего пароля ... Я много борется с этим, и я не знаю, где я ' m wrong ... Поле электронной почты, имя и фамилия могут быть обновлены, но пароль не указан, он перенаправляет меня только на корневую страницу!Не удается обновить пароль с помощью программы?
Это модель:
attr_accessible :name,:email,:lastname,:password,:password_confirmation,:current_password,:remember_me
validates :name,:presence=>true,
:length=>{:maximum=>50}
validates :lastname,:presence=>true,
:length=>{:maximum=>50}
def update_with_password(params={})
current_password = params.delete(:current_password)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
result = if valid_password?(current_password)
update_attributes(params)
else
self.attributes = params
self.valid?
self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
false
end
clean_up_passwords
result
end
def update_without_password(params, *options)
params.delete(:password)
params.delete(:password_confirmation)
result = update_attributes(params, *options)
clean_up_passwords
result
end
Это мой контроллер регистрации:
class RegistrationsController < Devise::RegistrationsController
def edit
@user = current_user
end
def update
@user = User.find(current_user.id)
if @user.update_without_password(params[:user])
# Sign in the user by passing validation in case his password changed
sign_in @user, :bypass => true
flash[:success]="Profile updated"
redirect_to edit_user_registration_path(current_user.id)
else
render "edit"
end
конец конец
Мои пароли контроллера:
class PasswordsController < Devise::PasswordsController
before_filter :authenticate_user!
def edit
@user = current_user
end
def update
@user = current_user
# raise params.inspect
if @user.update_with_password(params[:user])
sign_in @user,:bypass=>true
flash[:success]="You already changed your pass"
redirect_to edit_user_password_path(current_user.id)
else
render :edit
end
end
end
Мои пароли вид редактирования:
<h2>Change your password</h2>
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
<%= devise_error_messages! %>
<%= f.hidden_field :reset_password_token %>
<div><%= f.label :current_password, "Old password" %><br />
<%= f.password_field :current_password %></div>
<div><%= f.label :password, "New password" %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation, "Confirm new password" %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Change my password" %></div>
<% end %>
<%= render :partial => "devise/links" %>
Я был бы признателен за помощь я застрял в них на некоторое время ...