我想在引发错误时重定向用户但是重定向后似乎调用了救援下面的代码。重定向和返回有什么区别?或者发生了什么?
用户模型中的:
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
答案 0 :(得分:2)
根据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
这样我可以将身份验证逻辑留在用户模型中,而bang会让错误决定如何继续。
答案 1 :(得分:0)
在救援结束时添加一个返回修复此
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
return #this fixed it
end
login_user!(user)
end