私のアプリケーションでは、セッションの[]にユーザーのIDを格納します。すべてのコントローラのアクションの開始時に、私はApplicationControllerに呼ばCURRENT_USERで定義されたメソッド呼んでいる:私のコントローラのメソッドの開始時にRailsでページを表示する前にユーザーを適切に検証する方法
def current_user
@current_user ||= session[:current_user_id] &&
User.find_by_id(session[:current_user_id])
end
を、私は次のようしている:
@current_user = current_user
if @current_user == nil
redirect_to :home
return
end
これを明らかに繰り返しコードであり、どこかの方法でなければなりません。回答for this questionを読んで、自分のメソッドを親クラスに入れようとしましたが、私のコントローラクラスは今から降りてきましたが、今はそのメソッドからリダイレクトできないようです。私の親クラスで
、私が持っている:
def verify_user
user = current_user
if user == nil
redirect_to "/"
return
end
return user
end
そして今、私はこれに私のコントローラメソッドを変更しました:
@current_user = verify_user
これは動作しません、と私はなぜ知っていると思います。 1つは、verify_userメソッドでreturnを呼び出すことはできません。明らかにコントローラに戻るだけです。リダイレクトは影響を受けていないようです。リダイレクト呼び出しの後にformat.htmlが呼び出されている可能性があります。これが元のコードでのリターンの理由です。
私はここで間違っていますか、どのような提案をしなければなりませんか?これは間違ったアプローチですか?私の主な目標は、コントローラー方式ごとに1行のコードに「ユーザーが別の方法でリダイレクトしているかどうかを確認する」の全体を保つことです。
これは確かに動作しますが、私はまた、デバイスまたはそれのような他のものをチェックアウトする必要がありますが、 sguhaのポストで。 – Steve