4

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

在用户模型中:

 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
4

2 回答 2

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

这样,我可以将身份验证逻辑留在用户模型中,然后让错误决定如何继续。

于 2013-11-23T19:51:21.710 回答
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
于 2013-11-14T15:25:16.900 回答