2017-02-15 60 views
1

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

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

回答

2

您可以创建一个在您ApplicationController其中检查,如果用户登录并提交他的电子邮件,像这样一个before_action

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

做了一些更多的挖掘,发现这个在官方文档,似乎符合您的需求:

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或如此,但原则是一样的。

+0

你的答案是正确的,但驯Shlash的回答是更精确的,所以我接受了他。无论如何,谢谢你的帮助:) – lss

+0

呃,你接受了我@Iss :) –

相关问题