LoginSignup
4
1

More than 5 years have passed since last update.

35歳だけどRailsチュートリアルやってみた。[第4版 8章 8.3 ログアウト まとめ&解答例]

Posted at

はじめに

最近、プロジェクト管理業務が業務の大半を占めており、
プログラムを書く機会がなかなかありません。

このままだとプログラムがまったく書けない人になってしまう危機感(迫り来る35歳定年説)と、
新しいことに挑戦したいという思いから、
Ruby on Rails チュートリアル実例を使ってRailsを学ぼう 第4版を学習中です。
業務で使うのはもっぱらJavaなのですが、Rails楽しいですね。

これまでEvernoteに記録していましたが、ソースコードの貼付けに限界を感じたため、
Qiitaで自分が学習した結果をアウトプットしていきます。

個人の解答例なので、誤りがあればご指摘ください。

8.3 ログアウト

本章での学び

セッションの破棄

セッションの破棄は、destroyアクションで行う。

セッションの破棄

セッションからユーザIDを削除するために、deleteメソッドを使用する。
(DELETEリクエストを発行する)
結果、ユーザIDはnilになる。

session.delete(:user_id)

log_outメソッドの実装

Sessionヘルパーにlog_outメソッドを実装する。

def log_out
  session.delete(:user_id)
  @current_user = nil
end

log_outメソッドの呼び出し

Sessionsコントローラのdestroyアクション内で、log_outメソッドを呼び出す。
ログアウト後は、トップページへリダイレクトさせる。

def destroy
  log_out
  redirect_url root_url
end

ログアウト機能のテスト

0.ログイン中であることを確認する

  assert is_logged_in?

1.ログアウトパスへDELETEリクエストを送信する

  delete logout_path

2.ログイン中ではないことを確認する

  assert_not is_logged_in?

3.リダイレクト先がトップページであることを確認する

  assert_redirected_to root_rul

4.リダイレクトする

  follow_redirect!

5.ログインリンクが表示されていることを確認する

  assert_select "a[href=?]", login_path

6.ログアウトリンクが表示されていないことを確認する

  assert_select "a[href=?]", logout_path, count: 0

7.ユーザープロフィールリンクが表示されていないことを確認する

  assert_select "a[href=?]", user_path(@user), count:0

演習1

ブラウザから [Log out] リンクをクリックし、どんな変化が起こるか確認してみましょう。また、リスト 8.31で定義した3つのステップを実行してみて、うまく動いているかどうか確認してみましょう。

ログイン状態画面を表示する。

image

Cookiesにも値が入っていることを確認。

image

Log outリンクをクリックすると、トップページに遷移することを確認。
ログアウトリンク、ユーザプロフィールリンクが表示されていないことを確認。

image

演習2

cookiesの内容を調べてみて、ログアウト後にはsessionが正常に削除されていることを確認してみましょう。

sessionの値が変わっていることを確認。

image

おわりに

ついに8章が終わりました。
だんだん難しくなってきましたが、なんとか終了することができました。
かなり現場の開発に近い実践的な内容で、非常に楽しいです。
大変ですが楽しみながら、紙一重の努力を積み重ねていきます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1