我有一个Ruby on Rails Web应用程序,用户需要提供他的昵称和密码进行注册。成功注册后,用户被重定向到编辑页面,在那里他应该输入他的电子邮件。如果电子邮件为空,Rails总是重定向到编辑页面
用例需要总是将用户重定向到编辑页面,直到他提交了有效的电子邮件地址。但是,在当前状态下,用户可以点击任何菜单项并随后进入相应的页面。点击菜单链接时,如何防止此行为并将用户重定向回编辑页面?
我有一个Ruby on Rails Web应用程序,用户需要提供他的昵称和密码进行注册。成功注册后,用户被重定向到编辑页面,在那里他应该输入他的电子邮件。如果电子邮件为空,Rails总是重定向到编辑页面
用例需要总是将用户重定向到编辑页面,直到他提交了有效的电子邮件地址。但是,在当前状态下,用户可以点击任何菜单项并随后进入相应的页面。点击菜单链接时,如何防止此行为并将用户重定向回编辑页面?
您可以创建一个在您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
做了一些更多的挖掘,发现这个在官方文档,似乎符合您的需求:
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
或如此,但原则是一样的。
你的答案是正确的,但驯Shlash的回答是更精确的,所以我接受了他。无论如何,谢谢你的帮助:) – lss
呃,你接受了我@Iss :) –