2

ログインしていないときにTwitter.comにアクセスすると、ログインと登録のフィールドがあるマーケティング ページが表示されます。

ただし、ログインしてそこにアクセスすると、Twitter ハンドルのアクティビティ ストリームが表示されます。

Rails でこれを行う 1 つの方法はhome/index、ログインしているユーザー用public/index.htmlに を用意し、マーケティング サイト用に使用することです。でも Twitter は を使っていないpublic/index.htmlので、どうやって使っているのだろう?

1 つのルート ルートを持つ単純なケースですが、ユーザーがログインしているかどうかに応じて 2 つの異なるページを表示する if ステートメントですか?

または、それを行うために使用できる他のより派手なルーティングのトリックはありますか?

だけの場合、それはif-statement少しハックに思えます...いいえ?

ありがとう。

4

3 に答える 3

3

これは有利なスタートを与えるかもしれません。http://collectiveidea.com/blog/archives/2011/05/31/user-centric-routing-in-rails-3/

于 2011-09-07T12:18:21.543 に答える
3

デフォルトでは、特定のルートを処理するコントローラー メソッドは、対応する名前を持つビューをレンダリングします (ホーム コントローラーへのホーム/インデックス ルート リンクと、 app/views/home フォルダー内のビュー index.html.erb をレンダリングするインデックス アクション)。

ただし、ルート リクエストを処理するコントローラー メソッド内では、ユーザーがログインしているかどうかに基づいて、別のビューを単純にレンダリングできます。

おそらく次のようなものがあります。

class HomeController
  def index
   ...
   if user_logged_in?
      render "logged_in_user"
   # else it will render the index view by default
   end
end

終わり

この場合、「logged_in_user」は app/views/home フォルダーとは異なるビュー (テンプレートまたは html.erb ファイル) になります。

詳細については、こちらをご覧ください: Rails レンダリング ガイド

于 2011-09-07T12:26:45.400 に答える
1

ログインしていないユーザーを別のコントローラーにリダイレクトすることができます。ユーザーセッションのチェックはbefore_filterで行うことができます。

于 2011-09-07T12:20:03.407 に答える