Carlyという名前のユーザーはサインアップしておらず、インデックスページにアクセスします。彼女はサインアップし、メインダッシュボードページに自動的にリダイレクトされます。現在CarlyCoolness123という名前のユーザーCarlyは、ブラウザーを閉じて夕食を食べに行きます。彼女は再びPCに乗りますが、今回は実際のインデックスページであるcoolness.comしか覚えておらず、coolness.com/index-dashboardは覚えていません。ユーザーがサインインしている場合、このユーザーをダッシュボードページに自動的にリダイレクトする必要があります。つまり、ユーザーがサインインしている場合、ユーザーはインデックスページにアクセスできません。これを行うにはどうすればよいですか。私はいくつかのことを試しましたが、ここの人々は私よりもこれをよく理解していると思うので、私の間違いをここに含める必要はないと思います。
3 に答える
これは、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 ビューにリダイレクトされます (再定義していない場合)。
複数のルートパスを持つことは直観に反するように思われるため、以下の方法を使用することを好みます[読み取り:「他の方法を試したときにエラーが発生したため、別の方法を試しました。」].
これはうまく機能すると思いますし、実際には @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 を参照して、コードを間違えました。