#何をしたいか
ログインをした後に見せたいホーム画面的なものをroot_pathに設定していたので
ログインしていないユーザーはアプリの紹介ページに飛ぶように設定をします
#記述
このページに書いてある通りdeviseを使ったものになります。
まだdeviseを入れてない方は入れてからこのページに戻ってきてください。
さて本題に入ります
まずコントローラーの記述を変えます。
class PhotosController < ApplicationController
before_action :move_to_index #ここを追加で記述
def index
end
#ここから下を追加で記述
private
def move_to_index
unless user_signed_in?
redirect_to controller: :homes, action: :index
end
end
end
何をしているか上から解説します
###before_action :move_to_index
before_actionはコントローラーの全てのアクションが実行される前に何らかの処理を行う時に使用するものです
そのbefore_actionにmove_to_indexというメソッドを指定しています。
メソッドなのでここは皆さんで記述が違います
じゃぁそのメソッドはどこで定義してあるの??それは後ほど解説します。
###private
クラス外から呼び出すことのできないメソッドのことです。
Rubyでは、privateと記述した以下のコードがプライベートメソッドになります。
僕の解釈はこのコントローラー内でしか使用できないメソッドと解釈しています。違ったらすみません…
###def move_to_index
ここでmove_to_indexを定義しています。
先ほどのbefore_action :move_to_indexに繋がるわけです
ではそのmove_to_indexではどのようなことをしているのか見てきます
###unless user_signed_in?
user_signed_in?はdeviseを入れることで使えるヘルパーメソッドです
ユーザーがログイン済みかどうか判断します
そこにunless 〜がないならのような意味です
この単語がくると、ログインしていなければ〜で次の行に進みます
###redirect_to controller: :homes, action: :index
少し文が長いので
redirect_toにまず注目ですこれは、指定したURLに遷移させることができるメソッドです
なので
redirect_to "http://www.○○○○.com"
でもできるし
redirect_to root_path
のようにPrefix名も指定できます
redirect_to controller: :homes, action: :index
最後に指定したコントローラーのアクションを指定することもできます
他にもまだできるので是非検索してみてください
これで流れとしては
indexが読み込まれる前にbefore_actionで先にmobe_to_indexメソッドを読みます。その中にはユーザーがログインしていなければ、ここに遷移すると設定ができました。
#ルーティング
コントローラーにて
redirect_to controller: :homes, action: :index
と最後記述しているの
homesコントローラーのindexアクションが呼ばれます
get '/homes/home', to:'homes#index'
を記述します
/homes/homeはURL名の指定です
こんな感じになっています。
そしてhomes#index
homesコントローラーのindexアクションを指定します
これで終わりです