什么是rails方式,为get或post创建单独的操作?
是否可以使用相同的名称,但装饰动作只在其获取或发布时才会运行? e。
'get only'
def forgot_password
end
'post only'
def forgot_passord
end
答案 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.method
或request.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选项可以解决问题。