---
# System prepended metadata

title: 輪読会（20201217）
tags: [輪読会]

---

# 輪読会（20201217）
###### tags:`輪読会`
## 今日の学習範囲
P141 4-3-6 『オリジナルの検証コードを書く』 ~ P153　4-5-3『パスワードを受け付けて digest を保存する』
## メモ
自分で検証コードを書く場合の書き方は2つあります。
1. 検証を行うメソッドを追加して、そのメソッドを検証用のメソッドとして指定する
→一つのモデルに対してやる場合
2. 自前のValidatorを作って利用する
→複数のモデルで共通利用したい場合


今回はシンプルな1の方法をする！

app/models/task.rb
` validate :validate_name_not_including_comma`

app/models/task.rb
```
private

  def validate_name_not_including_comma
    errors.add(:name, 'にカンマを含めることはできません') if name&.include?(',')``
  end
```

↑がかけたら、バリデーションがちゃんとかけられているか、railsコンソールで確かめる

4-4-2 コールバックの実装
#### これは最終的には消す部分です！検証しているって感じです！！

app/models/task.rb
```
class Task < ApplicationRecord
  before_validation :set_nameless_name
  
  private
  
  def set_nameless_name 
    self.name = '名前なし' if name.blank?
  end
```

この後、同じく検証をしてコールバックできたら↑の部分は削除する

質問：self.name = '名前なし' if name.blank? これはなんで後ろのnameはself.nameじゃないんですか？
答え：rubyの仕様で『〇〇＝』って書いたときの〇〇がローカル変数として定義される
呼び出す時はSelfをつけないでメソッドを呼び出せる
代入する時はSelfつける

4−5　ログイン機能を作る

4-5-2 Userモデルを作る

`$ bin/rails g model user name:string email:string password_digest:string`
→このコマンドでUseｒモデルを作る

マイグレーションファイルを作成してファイルを編集する
db/migrate/XXXXXXXXXXXXXX_create_users.rb
```
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.string :email, null: false
      t.string :password_digest, null: false
      
      t.timestamps
      t.index :email, unique: true
    end 
  end
end
```

ファイルを書き換えたらマイグレーションを実行して、データベースにUserテーブルを作成する
`$ bin/rails db:migrate`

4-5-3 パスワードを受け付けて digest を保存する
パスワードの仕組みを作るために、Gemを導入する

Gemfile
```
 # Use ActiveModel has_secure_password 
 gem 'bcrypt', '~> 3.1.7'
 ```
↑追記したらコマンドを打つ
` $ bundle`

app/models/users.rb
```
class User < ApplicationRecord
  has_secure_password
end
```

↑がかけたら、現場Railsを参考にコンソールで実行してみましょう！


