什么是rails方式,为get或post创建单独的动作?忘记密码操作,我可以使用相同的操作名称处理帖子吗?
是否有可能具有相同的名称,但装饰的行动只能运行,如果其获得或发布?
例如
'get only'
def forgot_password
end
'post only'
def forgot_passord
end
什么是rails方式,为get或post创建单独的动作?忘记密码操作,我可以使用相同的操作名称处理帖子吗?
是否有可能具有相同的名称,但装饰的行动只能运行,如果其获得或发布?
例如
'get only'
def forgot_password
end
'post only'
def forgot_passord
end
Rails的办法是有一个资源 - 每个方法都应该有责任。
resources :password_resets
然后你就会让用户通过访问形式重设密码:
link_to 'Lost your Password?', new_password_reset_path
然后形式将发布创建一个新的password_reset ...这将发送一封电子邮件,显示密码重设的链接。
form_tag(password_resets_path, :method=>:post) do
当用户输入他们更新的密码时,它将更新密码重设。
对它们进行不同的命名,并在config/routes.rb
中创建两条路线。如果你真的真的想要一个动作做不同的事情,这是不是一个好主意,检查request.method
或request.get?
,request.post?
等
# 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
,你可以在你的控制器
#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'
的:通过选项做的伎俩。