4

私のウェブサイトは facebook.com と同じように動作するはずです。ユーザーがログに記録されていて、「/」になっている場合は、ホームコントローラーとしてレンダリングする必要があります。ログに記録されていない場合は、landing_pageコントローラーをレンダリングする必要があります

"/ " && user_signed_in? ---> ホームコントローラー

"/" && user_not_logged ---> ランディング ページコントローラ

Rails 4 と Devise を使用しています

アプリケーションコントローラー

class ApplicationController < ActionController::Base

  before_filter :authenticate_user!
end

Routes.rb

get "landing_page/index"

root 'home#index', :as => :home

「landing_page」コントローラーを除くすべてのコントローラーで実行される「before_filter」を ApplicationControl に保持するにはどうすればよいですか?

アップデート

「/en/landing_page」に移動すると、landing_page コントローラーが正しくレンダリングされます (ログアウトされます)。「/」に移動すると、「/users/sign_in」にリダイレクトされます。

class LandingPageController < ApplicationController
  skip_before_action :authenticate_user!

  def index
  end

end

class ApplicationController < ActionController::Base

  before_action :authenticate_user!

end

Routes.rb

 root 'landing_page#index'
4

3 に答える 3

9

解決しました!

ランディングページコントローラー

class LandingPageController < ApplicationController
  skip_before_action :authenticate_user!

  def index
  end

end

ホームコントローラー

class HomeController < ApplicationController
  skip_before_action :authenticate_user!
  before_action :check_auth

def check_auth
    unless user_signed_in?
        redirect_to :controller => :landing_page
    end
end
 end 

アプリケーションコントローラー

class ApplicationController < ActionController::Base

  before_action :authenticate_user!

end

Routes.rb

 root 'landing_page#index'
于 2013-07-23T22:36:21.070 に答える
0

このアクションを処理する前にフィルターを簡単に追加できると思います。

この回答のように

于 2013-07-23T19:38:53.373 に答える
0

コントローラーに confirm_logged_in 関数アクションを記述できると思います

before_filter :confirm_logged_in

その関数では、ログインしたユーザーに基づいてページをレンダリングする方法を指定できます

def confirm_logged_in<br>
  unless session[:user_id]
  flash[:notice] = 'Please log in.'
  redirect_to(:controller => 'access', :action => 'login')
  return false #halts the before_filter<

else
return true
  end
end
于 2013-07-23T21:02:58.937 に答える