Ard*_*tum 5 passwords edit devise ruby-on-rails-3
我尝试在我的rails应用程序中使用usu.但我不明白我如何授予用户更改密码的功能.我需要一个带有"旧密码","新密码"和"新密码确认"字段的表单.我该怎么做?
如果我在"/ profile"页面上使用默认设计表单
<%= render :template => 'devise/passwords/edit',
:locals => {
:resource => my_user_model_variable,
:resource_name => my_user_model_name } %>
Run Code Online (Sandbox Code Playgroud)
在user.rb中包含行
attr_accessible :email, :password, :password_confirmation, :remember_me
Run Code Online (Sandbox Code Playgroud)
但是有
undefined method 'devise_error_messages!' for #<#<Class:0x59b9200>
(然后评论devise_error_messages!line)
undefined method 'password' for #<Class:0x59b9200>
错误.
我尝试使用自己的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
Run Code Online (Sandbox Code Playgroud)
并使用来自此问题的建议:渲染设计编辑密码表单
插入此代码
<%= render :template => 'passwords/edit',
:locals => {
:resource => current_user,
:resource_name => User } %>
Run Code Online (Sandbox Code Playgroud)
进入"/ profile"页面.
passwords/edit.html.erb包含此代码
<h2>Change your password</h2>
<%# 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 %>
<p><%= f.label :password, "New password" %><br />
<%= password_field_tag :name => "user[password]"%></p>
<%= password_field_tag :name => "user[password_confirmation]"%></p>
<p><%= f.submit "Change my password" %></p>
<% end %>
<%= render :partial => "devise/shared/links" %>
Run Code Online (Sandbox Code Playgroud)
但渲染的表单具有action属性的"/ profile"值,并且提交此表单不执行任何操作.
dbK*_*per 11
您的表单应为password/edit.html.erb
<%# 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 %>
<p><%= f.label :current_password %><br />
<%= f.password_field :current_password %></p>
<p><%= f.label :password, "New password" %><br />
<%= f.password_field :password %></p>
<p><%= f.label :password_confirmation, "Confirm new password" %><br />
<%= f.password_field :password_confirmation %></p>
<p><%= f.submit "Change my password" %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
查看:
<h3>Change password </h3>
<hr/>
<%= render :template => 'passwords/edit',
:locals => { :resource => current_user, :resource_name => "user" } %>
Run Code Online (Sandbox Code Playgroud)
控制器:
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 => "Your Password has been updated!"
else
render :edit,:locals => { :resource => @user, :resource_name => "user" }
end
end
end
Run Code Online (Sandbox Code Playgroud)
路线:
devise_for :users ,:controllers => {:passwords => "passwords"} do
end
resources :passwords
Run Code Online (Sandbox Code Playgroud)
这个对我有用;
如果您在 User 周围添加引号,会发生什么情况,如下所示:
<%= render :template => 'passwords/edit',
:locals => {
:resource => current_user,
:resource_name => "User" } %>
Run Code Online (Sandbox Code Playgroud)