Railsチュートリアル11章 アカウント有効化
Railsチュートリアル11章について大事だと思ったことメモっていきます。
テストコードはRspecで書いてます。
アカウントの有効化とは・・・
ユーザーを新規登録する際にメールを送って、メール内に貼ってあるリンクをクリックすることで、初めてログインできるようになる。
全体の流れ
ユーザーがsave出来たら、before_createでactivation_tokenを作り、それをdigest化してハッシュにしたactivation_digestを作る(self.activation_digestとなっているのでuserのカラム内に入る)。そしてuserコントローラー内でメールを送る。この段階でuserはcreateされている。このメール内のedit_pathに行くとauthenticatedで、先ほどdigest化したやつとactivation_tokenが合っているか確かめる。合っていたらactivationコントローラー内のeditアクションでactivatedをtrueにする。セッションコントローラーでactivatedがtrueであればログインできる。falseであればログインできないように記述する。これによって初めてログインできるようになる。
テストコード(Rspec)
まずはmailerのテスト
これはmailer作成時にある程度できていたので変更した点を修正するだけで助かる
spec/mailer/user_mailer_spec.rb
続いてアカウント有効化についてのテスト
spec/factories/user.rb
spec/system/users_spec.rb
Railsチュートリアル10章
Railsチュートリアル10章について大事だと思ったことをメモっときます。
テストコードはRspecを使っています。
フレンドリーフォワーティング
ログイン前にそのページに行こうとしていたら、ログインした後は行こうとしたページになっていること。
Sessionを使ってurlを保存してあげる。
ログインする前にurlをsessionに保存(ログイン前、ページに行こうとした時)
ログインした後にそのurlにリダイレクト。行こうとしていたページがない場合はそのまま指定されたページ(デフォルト)。デフォルトのページは引数で渡されている。
sessions_helper.rb
url保存はusersコントローラーのbeforeアクション
保存されたurlに行くのはsessionsコントローラーのcreateアクション(ログインする時)
---------------------------------------------------------------------------------------
pagination ページ分割
gemを入れる。
ページ分割にはwill_paginateを使う。
usersビューのコードの中から@usersを自動で見つけていき他のページにアクセスするページネーションリンクを作成。
userコントローラー
users/index.html.erb
users/_user.html.erb
---------------------------------------------------------------------------------------
admin 管理ユーザーになる
まずはmigration
このmigrationでadminかどうかを調べるadmin?メソッドも使えるようになる
---------------------------------------------------------------------------------------
ユーザーを一気に大量に作る方法
db/seedsに書く。
ちなみにテストコードでユーザーを大量に追加する方法は
---------------------------------------------------------------------------------------
テストコード
テストコードはsystem,requestそれぞれに書いたので順番通りになってないです。
以上で10章終わりです!
Railsチュートリアル9章 クッキー(remember_me)
Railsチュートリアル9章で大事なとこをメモっていきます。
テストコードはRspecを使っています。
ランダムトークン生成
user.rb
user.rb
---------------------------------------------------------------------------------------
クッキーにuser_id, remember_tokenを入れる
sessions_helper.rb
---------------------------------------------------------------------------------------
authenticateメソッド
ちなみに前章ではハッシュ化するメソッドを取り扱った。
digestメソッドである。
newとcreateの違いがあることに気がついた。
---------------------------------------------------------------------------------------
モデルとヘルパーについて
モデルに書いたり、ヘルパーに書いたり行ったり来たりしている。なぜだろうか。
UserにまつわるメソッドはUserモデルに書かなければならない。
Sessionコントローラーで使うメソッドはSession関連に書かなければならない。
Sessionモデルは存在しない。Sessionヘルパーに書く。UserモデルはSessionじゃないので書くのはおかしい。
だからモデルとヘルパーそれぞれに書かないといけない。
---------------------------------------------------------------------------------------
テストコード
sessionやcookiesはsystem specでの書き方がわからなかったので(目に見えないから)そのため今回はrequest specとhelper specも使用した。
request spec: コントローラーにまつわるテスト
helper spec: ヘルパーにまつわるテスト
まずはモデルテスト1つ追加
user_spec.rb
追加!!複数のタブでログアウト
ログインしていないとログアウトリンクが見当たらないためsystemでは書けなかった。
visitはできない。destroyはビューないため。
サポートモジュール追加した。ログインしているかどうか判断する。
is_login?メソッド。ログインしているかどうかを判断するメソッドはヘルパーのメソッドであったため、サポートモジュールに入れて使えるようにする。
sessions_spec.rb
request spec と helper spec
サポートモジュール(ログイン用)
system/sessions_spec.rb
requestやhelperも system内に書いちゃっておk
以上で9章終わりです!
Railsチュートリアル8章 セッション
Railsチュートリアル8章について大事なとこメモっときます!
テストコードはRspecで書いてます。
Sessionとは・・・
ログイン情報を保持する。
sessionはブラウザを閉じると自動で終了する。
Google Chromeの場合は、ブラウザを閉じてもログイン情報保持されたが、これはあくまでブラウザ依存。他のブラウザでは保持しない場合がある。その為次にクッキーを設定する必要がある。(これは次章)
---------------------------------------------------------------------------------------
flashメッセージ
エラーメッセージはActive Recordによって自動生成されていたが(User新規登録時の情報が正しくない時)、セッションはActive Recordではないのでエラーメッセージを表示しない。
そこでflashでエラーを表示する。
flashを使うにおいて renderとredirectの違い
ーーーーーーーーーーーーー
・renderの場合
flash[:danger]
render ___
このままではだめ。他のページに行ってもエラー文(flash)が出る。これはrenderされているから。
flash.now[:danger]に変更する必要がある。
こうするとその後リクエストが発生した時にエラー文は消える
・一方redirectの場合は
flash[:success]
redirect to _____
リダイレクトされるのでこのままでいい。
---------------------------------------------------------------------------------------
form_with セッションの場合
今まではモデルで使ってきた。
例)users/new
sessionにはモデルがない。
しかしurlとscopeを置けば問題なく使える
--------------------------------------------------------------------------------------
digest
この章では出てきたが使わなかった。しかし次章以降で大事になるので。
user.rb
-------------------------------------------------------------------------------------
テストコード(Rspec)
spec/system/sessions_spec.rb
新規登録時にログインしている(追加)
spec/system/users_spec.rb
以上で8章を終わります!
Railsチュートリアル7章
テストコードはRspecで書いています。
画像 Gravatar
Gravatarは無料のサービスで、プロフィール写真をアップロードして、指定したメールアドレスと関連付けれる。
users/show.html.erb
users_helper.rb
そもそもhelperとは・・・
モデルのメソッドと何が違うの??
モデルのメソッドはコントローラーで使う感じ。
helperは全ビューで共通なので、ビューでも使えるという感じ。
実際に今回はshowのビューで使っている。
今のところはこういう理解です。
---------------------------------------------------------------------------------------
plurialize
勝手に複数の時にsをつけてくれたりする
例)
>> helper.pluralize(1, "error")
=> "1 error"
>> helper.pluralize(5, "error")
=> "5 errors"
---------------------------------------------------------------------------------------
ユーザー登録完了後にメッセージを表示する
コントローラー
ビュー
application.html.erb
---------------------------------------------------------------------------------------
テストコード(Rspec)
以上7章は終わりです!
Railsチュートリアル6章
Railsチュートリアル6章について大事だと思ったことをまとめます!
テストコードはRspecを利用して書いております。
・特定の属性のみ更新したい場合はupdate_attributeを使う
user = User.new(name: "The Dude", email: "dude@abides.org")
user.update_attribute(:name, "BBB")
--------------------------------------------------------------------------------------
テストコード 正しくないことをテストする
まずは正しいことをテストする場合
次に正しくないことをテストする場合
---------------------------------------------------------------------------------------
データベースのインデックス migrationにadd_index
これは本の索引みたいなもの。情報を調べに行く
索引がなければ最初から最後までみていかなければならないuser.firstからuser.lastまで(full scan)
索引があれば1回の手間で済む。
---------------------------------------------------------------------------------------
メールアドレス 大文字小文字を区別しないようにする
userを保存する前にモデル内のbefore_saveでemailをdowncaseにする!
---------------------------------------------------------------------------------------
has_secure_password
・ハッシュ化したパスワードをpassword_digestという属性に保存できる。
・passwordとpassword_confirmstionが使えるようになる。
・authenticateメソッドを使えるようになる。
これはpasswordと、ハッシュ化されたpassword_digestを比較できる。
**has_secure_passwordを使うためにはbycryptというgemを導入する必要がある。
---------------------------------------------------------------------------------------
テストコード(Rspec使用)
以上で6章終わりです!
Railsチュートリアル 5章
Bootstrap
Webデザインとユーザーインターフェイス要素を簡単に導入できるCSSフレームワークである。
gemを入れる必要がある。
@importを使ってcssにBootstrapを入れ込む。
cssファイル内
Sass
cssの上位版?
ネストと変数を使える
ネスト
.center {
text-align: center;
}
.center h1 {
margin-bottom: 10px;
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
⏬
.center {
text-align: center;
h1 {
margin-bottom: 10px;
}
}
これがネスト
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
変数
h2 {
.
.
.
color: #777;
}
.
.
.
footer {
.
.
.
color: #777;
}
⏬
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
$light-gray: #777;
これが変数
.
.
.
h2 {
.
.
.
color: $light-gray;
}
.
.
.
footer {
.
.
.
color: $light-gray;
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
名前付きルート
テストコード
リンクがあるかどうかは have_link href: パス名を使うことでテストできた。
expect(page) to have_link 'Help', href:help_path