Я пытаюсь использовать devise в моем приложении rails. Но я не понимаю, как я могу дать пользователю возможность изменить его пароль. Мне нужна форма с полями «старый пароль», «новый пароль» и «подтверждение нового пароля». Как я могу это сделать?
Если я использую форму по умолчанию на странице «/ profile»
<%= render :template => 'devise/passwords/edit',
:locals => {
:resource => my_user_model_variable,
:resource_name => my_user_model_name } %>
In user .rb содержит строку
attr_accessible :email, :password, :password_confirmation, :remember_me
Но там была
неопределенный метод devise_error_messages! для #
, а затем (после комментирования строки devise_error_messages!)
undefined 'password' метода для ошибок #
.
Я пытаюсь использовать свой собственный PasswordsController:
class PasswordsController < ApplicationController
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)
redirect_to root_path, :notice => "Password updated!"
else
render :edit
end
end
end
и использую совет из этого вопроса: Отображение формы ввода пароля для редактирования Devise
вставьте этот код
<%= render :template => 'passwords/edit',
:locals => {
:resource => current_user,
:resource_name => User } %>
на страницу «/ profile».
passwords / edit.html.erb содержат этот код
Change your password
<%# raise resource.inspect %>
<%= 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 %>
<%= f.label :password, "New password" %>
<%= password_field_tag :name => "user[password]"%>
<%= password_field_tag :name => "user[password_confirmation]"%>
<%= f.submit "Change my password" %>
<% end %>
<%= render :partial => "devise/shared/links" %>
Но визуализированная форма имеет значение «/ profile» для атрибута действия, и отправка этой формы ничего не делает .