如果电子邮件为空,Rails总是重定向到编辑页面

时间:2017-02-15 09:51:16

标签: ruby-on-rails

我有一个Ruby on Rails Web应用程序,用户需要提供他的昵称和密码才能注册。注册成功后,用户将被重定向到编辑页面,在那里他应该输入他的电子邮件。

用例需要始终将用户重定向到编辑页面,直到他提交了有效的电子邮件地址。但是,在当前状态下,用户可以单击任何菜单项,然后进入相应的页面。如何在单击菜单链接时阻止此行为并将用户重定向回编辑页面?

2 个答案:

答案 0 :(得分:2)

您可以在before_action中创建ApplicationController,检查用户是否已登录并提交了他的电子邮件,如下所示:

class ApplicationController < ActionController::Base
  before_action :validate_email_confirmed

  def validate_email_confirmed
    return unless current_user
    redirect_to user_edit_path unless current_user.email?
  end
end

请注意,您必须跳过此before_action用户编辑和更新操作,否则您最终会有重定向循环。这是针对特定操作跳过现有before_action的方法:

class UsersController < ApplicationController
  skip_before_action :validate_email_confirmed, only: [:edit, :update]
end

答案 1 :(得分:1)

在官方文档中进行了一些挖掘,并发现这一点似乎符合您的需求:

class ApplicationController < ActionController::Base
  before_action LoginFilter
end

class LoginFilter
  def self.before(controller)
    unless controller.send(:logged_in?)
      controller.flash[:error] = "You must be logged in to access this section"
      controller.redirect_to controller.new_login_url
    end
  end
end

你当然必须重做一些,以获得awaiting_email等,但原则是一样的。