救援错误并在rails中重定向

时间:2013-11-14 15:22:41

标签: ruby-on-rails redirect

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

用户模型中的

 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

2 个答案:

答案 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