忘记密码操作,我可以处理具有相同操作名称的帖子吗?

时间:2011-03-03 20:55:37

标签: ruby-on-rails

什么是rails方式,为get或post创建单独的操作?

是否可以使用相同的名称,但装饰动作只在其获取或发布时才会运行? e。

'get only'
def forgot_password
end

'post only'
def forgot_passord
end

4 个答案:

答案 0 :(得分:1)

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

resources :password_resets

然后您将通过访问表单让用户重置密码:

link_to 'Lost your Password?', new_password_reset_path

然后表单将发布以创建一个新的password_reset ...这将发送一个电子邮件,其中包含显示password_reset的链接。

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

当用户输入更新的密码时,它将更新password_reset。

答案 1 :(得分: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

答案 2 :(得分:0)

以不同方式命名,并在config/routes.rb中创建两条路线。如果你真的希望一个动作做不同的事情,这不是一个好主意,请检查request.methodrequest.get?request.post?等。

答案 3 :(得分: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'

:via选项可以解决问题。