什麼是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'
的:通過選項做的伎倆。