2012-02-18 31 views
11

Railsのユーザーに別のルートページを表示したい。ログインしているユーザーのページが異なり、rootユーザーでログインしていない

私はルートを定義した:

root :to => 'welcome#index' 

、ウェルカムコントロール:

class WelcomeController < ApplicationController 
    before_filter :authenticate_user! 

    def index 
    end 

end 

現在のところ、それはログインユーザーのためokですが、ユーザーにはログインしていないが/ユーザー/ sign_in

にリダイレクト

私は静的ルートページを表示し、リダイレクトしません。

+1

あなたのbefore_filterを削除し、それらがログインしているかどうかに基づいて表示するかを決定するために、インデックスメソッドに、あなたのロジックを追加し、あなたが工夫を使用しています? –

+0

@MarcTalbotはい、routes.rbに実装することは可能ですか? –

+1

この正確な質問はここで答えていますhttp://stackoverflow.com/questions/8888289/rails-3-w-devise-how-to-set-two-separate-homepages-based-on-whether-the-user-私/ 8888513#8888513 –

答えて

2

この回答はうまくいくはずです。これはBradleyがリンクしたページに掲載されました。

ウェルカムコントローラに入れます。

あなた routes.rb
def index 
    if authenticate_user? 
    redirect_to :controller=>'dashboard', :action => 'index' 
    else 
    redirect_to '/public/example_html_file.html' 
    end 
end 
2

authenticated do 
    root :to => 'welcome#index' 
end 

root :to => 'home#static_page' 

これは、すべての認証済みユーザーのためのroot_urlがあなたの参考のためwelcome#index

であることが保証されます:https://github.com/plataformatec/devise/pull/1147

+0

これはRails 4ではもう使えません:認証済み:ユーザdo root: 'dashboard#index'、::authenticated_root end root: 'landing_page#index'、::public_root – ardochhigh

23

答え、Puneet Goyal氏によって提案されますRails 4では動作しません。thisを参照してください。ソリューションは、このような2つのルートの1つのエイリアスを使用することです:。

authenticated do 
    root :to => 'welcome#index', as: :authenticated 
end 

root :to => 'home#static_page' 
+1

Jose Valimこのソリューションについて、Deviseの問題[ここ](https://github.com/plataformatec/devise/issues/2393#issuecomment-17298414)で議論しています。 –

関連する問題