我想在引发错误时重定向用户,但是重定向后似乎调用了救援下面的代码.重定向和返回有什么区别?或者发生了什么?
在用户模型中:
def self.find_by_credentials(user_name,password)
user = User.find_by_user_name(user_name)
msg = 'User Not Found'
raise StandardError, msg unless user
msg = 'Invalid Login'
raise StandardError, msg unless user.is_password?(password)
user
end
在会话控制器中:
def create
begin
user = User.find_by_credentials(
params[:user][:user_name],
params[:user][:password]
)
rescue StandardError => e
flash.now[:errors] = e.message
redirect_to new_user_url
end
login_user!(user)
end
最佳答案 根据MrDanA的建议,我发现了一种我觉得舒适和有效的风格.
class SessionsController < ApplicationController
def create
begin
@user = User.authenticate!(
params[:user]
)
redirect_to root_url
rescue StandardError => e
flash.now[:error] = "Invalid Login"
render :new
end
end
这样我就可以将认证逻辑留在用户模型中,而爆炸会让错误决定如何继续.