# 輪読会(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` →このコマンドでUserモデルを作る マイグレーションファイルを作成してファイルを編集する 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を参考にコンソールで実行してみましょう!