内容
アプリを作成するにあたり、ログインする前でもトップページが表示されるように設定しました。
解決法
deviseを使用してログイン機能をつけた場合、
application_controller.rb
before_action :authenticate_user!
を記述することで全てのコントローラーでアクションが動く前にログインしているかしていないかを判断され、ログインしていなければログインページにリダイレクトされるようになります。
routes.rb
root "tops#index"
この状態では、root_pathにトップページを指定してもログインページに飛ばされてしまいます。
どうにかしてtopsコントローラーでは before_action :authenticate_user! を無効化したいですね。
そんな時は、skip_before_action を使います。
tops_controller.rb
class TopsController < ApplicationController
skip_before_action :authenticate_user!, only: %i[index]
end
これによって、topsコントローラーでは authenticate_user! が無効化されます。
さらに、only: %i[アクション名] でそのアクションでだけ無効化することもできます。
これで、未ログインでもトップページに遷移することができます。