2011-07-07 22 views
5

Raylar uygulamasında kullanmamaya çalışıyorum. Ancak, şifresini değiştirmek için kullanıcı işlevine nasıl yardımcı olabileceğimi anlamıyorum. "Eski şifre", "yeni şifre" ve "yeni şifre onayı" alanlarına ihtiyacım var. Nasıl yapabilirim? i "/ profile" sayfasında varsayılan vasiyetle formu kullanırsanızRaylar 3 Parolayı el ile değiştir şifreyi değiştir

user.rb olarak

<%= render :template => 'devise/passwords/edit', 
         :locals => { 
          :resource => my_user_model_variable, 
          :resource_name => my_user_model_name } %> 

hat

attr_accessible :email, :password, :password_confirmation, :remember_me 

içerirler Ama sonra undefined method 'devise_error_messages!' for #<#<Class:0x59b9200> ve orada (devise_error_messages yorum sonra! hat) undefined method 'password' for #<Class:0x59b9200> hataları.

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 

ve bu soruya gelen tavsiyelerde kullanın:: Rendering the Devise edit Password Form

insert Bu kodu

<%= render :template => 'passwords/edit', 
        :locals => { 
         :resource => current_user, 
         :resource_name => User } %> 

"/ profile" sayfasına

Kendi PasswordsController kullanmayı deneyin.

şifreleri/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" %> 

Ama action özelliği ve bu formu submiting için verilen formu vardır "/ profile" değer hiçbir şey bu kodu içerir.

<%= render :template => 'passwords/edit', 
        :locals => { 
         :resource => current_user, 
         :resource_name => "User" } %> 
+1

Eğer doğruysa, bu cevaplardan birini kabul etmelisiniz. –

cevap

0

<h3>Change password </h3> 
<hr/> 
<%= render :template => 'passwords/edit', 
        :locals => { :resource => current_user, :resource_name => "user" } %> 

Kontrolör:

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 

Rotalar:

Bana uyar
devise_for :users ,:controllers => {:passwords => "passwords"} do 
    end 

    resources :passwords 

;

+0

Artık "tanımlanmamış" User_password_path "hatası var. – Ardentum

+0

Sorunun, "kaynak" a Devise denetleyicisinden farklı bir denetleyiciden erişmekte olduğunu düşünüyorum. PasswordsController'ınızı Devise PasswordsController'dan devralmayı deneyin. – joseph

11

Formunuz yani edilmelidir şifre/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 %> 

GÖRÜNÜM: Eğer gibi, Kullanıcı tırnak içine alın ne olur