前のパートに戻る 完了して次のパートへ  

  3-3 サインアウトリンクの追加

このパートでは、トップページからサインアウトができるようにリンクを追加します。

本パートの目標物


本パートでは下記の動画のようにサインインしているときはサインアウトリンクがあり、サインインしていないときはサインアウトリンクが表示されないように実装していきます。

目標物を作成するまでの流れ


  1. サインアウトのリンクを追加
  2. サインインしていないときはサインアウトリンクを非表示

では実際に進めていきましょう。

1. サインアウトのリンクを追加


Railsでリンクを実装する際はlink_toメソッドを使います。

【使い方】

参考)link_toメソッドを使ったリンクの作成

サインアウトリンクのパスはDeviseがデフォルトで用意しています。rails routesコマンドを実行して、ルーティングを確認しましょう。

$ rails routes

上記のコマンドを実行すると、下記のようにパスが/users/sign_outのルーティングが表示されます。このパスがサインアウトリンクのパスに当たります。

destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy

では、home.html.erbに以下のコードを追加してください。

app
└── views
    └── pages
        └── home.html.erb

link_toでパスを指定する場合、名前付きヘルパーに当たるdestroy_user_session_pathを追加することで、リンクのパスを指定できます。

また今回のサインアウトリンクの場合rails routesの結果から分かるように、HTTPメソッドがDELETEと書いてあります。なのでlink_toにもmethod: :deleteという記述を追加して、HTTPメソッドをDELETEに指定する必要があります。

上記のコードを追加すると、下記の画像のようにサインアウトのリンクが表示されます。


では実際にサインアウトしてみてください。 サインアウトしても、常にサインアウトリンクが表示されている状態になります。(下記の画像はサインアウトしたときの画像です。)



2. サインインしていないときはサインアウトリンクを非表示


サインアウトリンクはユーザーがログインをしている時以外、表示させたくないので、home.html.erbに以下のコードを追加してください。(追加する行が2箇所あるので気をつけてください。)

app
└── views
    └── pages
        └── home.html.erb

上記のコードは、もしユーザーがサインインしていれば、サインアウトリンクを表示させます。

if式は条件式が真の場合の処理をするのに使われます。

if 条件式
  条件式が真のときに実行する処理
end

user_signed_in?はDeviseを入れることで使えるようになるヘルパーメソッドです。

Deviseで使えるヘルパーメソッドは以下のリンクから確認してみてください。

参考) Rails deviseで使えるようになるヘルパーメソッド一覧

ではサインインしていない状態であれば、サインアウトが表示されないことを確認してください。


以上で今回のパートは終了です。

お疲れさまでした。

議論

3 質問

このコースの評価は?