2016-06-23 6 views

答えて

0

あなたのルートファイルのif/elseステートメントが正しくないと思います。ルートファイル内のビジネスロジックと考えてください。あなたのビジネスロジックは、あなたのモデル(ActiveRecordではなく、普通の古いルビクラスでもかまいません)や、コントローラの中のコントローラ(この場合のような)の方がコントローラのほうが適しているかどうかがモデルにあります。

ユーザー認証のためにワーデンのようなミドルウェアを使用していないと仮定した場合、ルートファイルでデータベースのクエリと認証を行う必要があります。これはそこに属していない別のフラグでなければなりません。同様に、あなたのビューでSQLクエリを実行するようなものです。


申し訳ありませんが、私の意見を正当化したいと思います。さて、可能な解決策に戻りましょう。

/elseをチェックして正しいパスにリダイレクトする場合は、何らかのコントローラアクションにルートパスを設定します。

# routes.rb 
root 'static_pages#home' 

# StaticPagesController.rb 
before_filter :redirect_if_logged_in 

def redirect_if_logged_in 
    redirect_to(user_path(@user)) if @user # check if user logged in 
end 

またはこれに類する操作はusers#showです。どのケースにも最適です。

0

これを行うために、あなたはおそらくconstraintを定義する必要があると思い、ここで最も重要な方法は、そのような

# in constraints/homepage_constraint.rb 
class HomepageConstraint 
    def matches?(request) 
    # in most cases, you'd store your user_id or other params for determining the current user in a session 
    request.session[:user_id].present? 
    end 
end 


routes.rb 
# Rails route is based on the order, place the constraint here to check if there is a current user, if the `matches?` returns false, it would use the generic root route 
root 'users#show', constraints: HomepageConstraint.new 
root 'static_pages#home' 
として matches?です
関連する問題