在我的Rails應用程序,我有我的SessionsController
的create
方法該位的邏輯,我想通過提取成一個方法重構出:的Rails:展開救援塊不被稱爲私有方法
if login_form.validate(params[:user])
begin
@user = User.find_by!(email: params[:user][:email])
rescue ActiveRecord::RecordNotFound => e
flash.now.alert = 'invalid user credentials'
render :new and return
end
else
flash.now.alert = login_form.errors.full_messages
render :new and return
end
所有這些都是檢查用戶是否存在於系統中。我想重構爲
if login_form.validate(params[:user])
find_user
else
flash.now.alert = login_form.errors.full_messages
render :new and return
end
這一點,那麼私人find_user
方法:
private
def find_user
begin
@user = User.find_by!(email: params[:user][:email])
rescue ActiveRecord::RecordNotFound => e
flash.now.alert = 'invalid user credentials'
render :new and return
end
end
但現在我做到這一點之後,ActiveRecord::RecordNotFound
異常被忽略!該方法不會在return
命令處停止。這是爲什麼?我究竟做錯了什麼?
更新:
我明白我在做什麼錯了。但是,我如何以正確的方式做到這一點?
那麼,什麼是這樣做的正確方法? – 2014-09-06 12:33:46
登錄表單的驗證功能沒有檢查密碼/用戶嗎?我可能會把那個檢查放在那裏,然後你可以跳過異常處理,你不需要find_user方法。 – Robban 2014-09-06 14:34:03