2011-03-03 18 views

回答

1

Rails的办法是有一个资源 - 每个方法都应该有责任。

resources :password_resets 

然后你就会让用户通过访问形式重设密码:

link_to 'Lost your Password?', new_password_reset_path 

然后形式将发布创建一个新的password_reset ...这将发送一封电子邮件,显示密码重设的链接。

form_tag(password_resets_path, :method=>:post) do 

当用户输入他们更新的密码时,它将更新密码重设。

0

对它们进行不同的命名,并在config/routes.rb中创建两条路线。如果你真的真的想要一个动作做不同的事情,这是不是一个好主意,检查request.methodrequest.get?request.post?

1
# in routes.rb 
resources :password_resets 

# in app/controllers/password_resets.rb 
class PasswordResets < ApplicationController 

    def new 
    @user = current_user 
    # render new reset form 
    end 

    def create 
    @user = current_user 
    @new_password = User.generate_random_password 
    if @user.update_attributes(:password => @new_password) 
     UserMailer.password_reset(@new_password).deliver 
     flash[:notice] = 'Successfully reset your password, check your email!' 
    else 
     flash[:error] = 'Could not reset password' 
    end 
    redirect_to login_path 
    end 

end 
0

,你可以在你的控制器

#get only 
def get_forgot_password 
end 

#post only 
def post_forgot_passord 
end 

重命名操作,然后在你的routes.rb

match '/forgot_password' => 'pass_reset#get_forgot_password', :via => 'get' 
match '/forgot_password' => 'pass_reset#post_forgot_password', :via => 'post' 

的:通过选项做的伎俩。

相关问题