Rails执行if和else语句

时间:2012-04-03 20:29:37

标签: ruby-on-rails

我正在尝试在我的应用程序中设置电子邮件验证过程,我会生成一个令牌,并在用户注册时通过电子邮件发送给用户。但是当我点击验证链接时,'users_controller / confirm'操作中的if和else语句都会被执行。我被重定向到root_path但是修改了用户记录中的两个字段。当我从rails控制台运行find_by_token时,它返回预期的用户。我正在使用mysql,我想知道查询中是否存在某种导致两者都执行的延迟。

  def confirm
    if User.find_by_token(params[:token]).nil?
      redirect_to root_path
    else
      @user = User.find_by_token(params[:token])
      cookies[:auth_token] = @user.auth_token
      User.skip_callbacks = true
      @user.update_attribute(:token, "")
      @user.update_attribute(:confirmed, 1)
      User.skip_callbacks = false
      reset_session
      redirect_to routes_path
    end
  end

1 个答案:

答案 0 :(得分:2)

您可以在过滤器之前使用,以便像这样检查和重定向

  before_filter :find_user

  def confirm
    #your action code
  end

  private
  def find_user
    @email = User.find_by_token params[:token].to_s
    redirect_to root_path, notice: 'Your token is wrong!' if @email.nil?
  end

这样,您的操作代码将仅针对有效记录运行。