9

Carlyという名前のユーザーはサインアップしておらず、インデックスページにアクセスします。彼女はサインアップし、メインダッシュボードページに自動的にリダイレクトされます。現在CarlyCoolness123という名前のユーザーCarlyは、ブラウザーを閉じて夕食を食べに行きます。彼女は再びPCに乗りますが、今回は実際のインデックスページであるcoolness.comしか覚えておらず、coolness.com/index-dashboardは覚えていません。ユーザーがサインインしている場合、このユーザーをダッシュ​​ボードページに自動的にリダイレクトする必要があります。つまり、ユーザーがサインインしている場合、ユーザーはインデックスページにアクセスできません。これを行うにはどうすればよいですか。私はいくつかのことを試しましたが、ここの人々は私よりもこれをよく理解していると思うので、私の間違いをここに含める必要はないと思います。

4

3 に答える 3

12

これは、Devise が正しくセットアップされており、ダッシュボード ビューのレンダリングを担当するダッシュボード コントローラーがあることを前提としています。app/controllers/dashboard_controller.rb で次のようにします:

class DashboardController < ApplicationController
  before_filter :authenticate_user!

...
end

次に、config/routes.rb ファイルに以下を追加します。

resources :dashboard

authenticated :user do
  root :to => "dashboard#index"
end

root :to => redirect("/users/sign_in")

ダッシュボードのインデックス ビューがある場合、アプリのルートにアクセスすると、自動的に表示されます (ユーザーがサインインしている場合)。ユーザーがサインインしていない場合は、devise のデフォルトの sign_in ビューにリダイレクトされます (再定義していない場合)。

于 2013-01-19T16:57:19.197 に答える
6

複数のルートパスを持つことは直観に反するように思われるため、以下の方法を使用することを好みます[読み取り:「他の方法を試したときにエラーが発生したため、別の方法を試しました。」].

これはうまく機能すると思いますし、実際には @MFCS が最初に求めていたものです。これは、条件付きでルートポイントを別の場所にしないためです。代わりに、サインインしたユーザーが にアクセスすると、別のパスにリダイレクトされますroot_path

config/routes.rb:

root to: 'welcome#index'

app/controllers/welcome_controller.rb:

class WelcomeController < ApplicationController
  def index
    if user_signed_in?
      redirect_to dashboard_path
    end
  end
end

他のユーザーの好みではないかもしれませんが、ダッシュボードには (ルート URL の代わりに) ダッシュボードの URL が引き続きブラウザーに表示されるため、私はこれを好みます。また、好みのユーザー エクスペリエンスにも依存します。

編集: ルート リソースのコントローラーの代わりに DashboardController を参照して、コードを間違えました。

于 2015-02-19T00:22:03.253 に答える