2017-02-15 37 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 :) –

相關問題