ruby-on-rails – 救援错误并在rails中重定向

我想在引发错误时重定向用户,但是重定向后似乎调用了救援下面的代码.重定向和返回有什么区别?或者发生了什么?

在用户模型中:

 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

这样我就可以将认证逻辑留在用户模型中,而爆炸会让错误决定如何继续.

点赞