2017-02-15 5 views
1

Ruby on Rails Webアプリケーションがあります。ユーザーはニックネームとパスワードを入力して登録する必要があります。登録に成功すると、ユーザーは編集ページにリダイレクトされ、編集ページで電子メールを入力する必要があります。メールが空であれば、Railsは常にページを編集するようにリダイレクトします

ユースケースでは、有効なメールアドレスを送信するまで、ユーザーを編集ページにリダイレクトする必要があります。しかし、現在の状態では、ユーザは任意のメニュー項目をクリックして、対応するページに移動することができる。この動作を防ぎ、メニューリンクをクリックしたときにユーザーを編集ページに戻すにはどうすればよいですか?

答えて

2

あなたはユーザーがログインしているし、彼の電子メールを提出したかどうかをチェックするあなたのApplicationControllerbefore_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

あなたの答えは正しいですが、Tamer Shlashの答えはより正確なので、私は彼を受け入れました。とにかく、助けてくれてありがとう:) – lss

+0

ええ、あなたは私の受け入れ@Iss :) –

関連する問題