LoginSignup
0
0

More than 5 years have passed since last update.

Rails チュートリアル メモ 第6章

Last updated at Posted at 2018-06-14

メモ

6.1.1

  • モデル名は単数形、コントローラーとテーブル名は複数形

6.1.3

  • rails console --sandbox でサンドボックスモードに突入可能
  • モデルクラスの create メソッド = new + save
    • destroy メソッドで DB から削除できるが、メモリには残っている

6.1.4

  • find : DB 上の ID で検索
  • find_by : ハッシュを与えてそれで検索
    • find_by_name のようなメソッドも生えている(こっちが新しい?)

6.1.5

  • reload : DB から読み込み直す
  • update_attributes :

6.2.2

  • バリデーションルールはモデルクラスに書く
  • バリデーションで失敗すると、そのオブジェクトの .errors 属性が埋まる
    • user.errors.full_messages などとして情報が取得できる

6.2.5

  • モデルに uniqueness : true を指定すると、valid? メソッド実行時に DB が SELECT される
    • 既に存在してないかを確認するため
    • 逆に言うと、valid? を実行するまでは errors を取得しても何も出てこない

6.2.5

  • 出てきた4つのバリデーションのうち、presenceuniqueness は DB レベルでも保証したほうがよさそう
    • length は DB 側の型によって決まる
    • format は DB 側で検証できなさそう?

6.2.5

  • マイグレーションの名前は、コミットログのように「何をやったか」がわかるように書くこと
    • 例: rails generate migration add_index_to_users_email
# そうするといい感じになる

ls -1 db/migrate/
20180611072246_create_users.rb
20180614054521_add_index_to_users_email.rb
  • あとでわかったが、末尾を to_テーブル名 として、引数で カラム名:型 を渡すと、いきなりいい感じのマイグレーションを作ってくれる
    • 例: rails generate migration add_password_digest_to_users password_digest:string

6.2.5

  • before_save で保存時に何か処理した結果をテストする場合、reload が便利

6.3.1

  • モデルクラスに has_secure_password なるメソッドを書くだけで、以下のようなことが起きる
    • DB の password_digest カラムに、ハッシュ化されたパスワードを保存できるようになる
    • 以下の属性が生える
      • password : ユーザーが入力したパスワード
      • password_confirmation : 確認用に2回入力してもらった方のパスワード
      • いずれも、存在性とパスワード一致のバリデーション付き
    • 以下のメソッドが生える
      • authenticate
  • 条件
    • password_digest というカラムが DB に存在すること
    • bcrypt gem のインストール

6.3.3

  • 前述の通り password にはデフォルトで存在性のバリデーションがかかっているが、これは新規追加のときにしか働かないので、そのままだと全てスペースのパスワードに変更できてしまう
    • これを防ぎたかったら、自分で presence バリデーションを書くしかない
    • これを防ぐ必要あるのかな?全て「a」のパスワードを特に防がないのと同じ理由で、放っておいてもいい気もするけど
  • なんにせよ、password のバリデーションを開いて修正するときは注意が必要そう

6.3.4

  • DB からユーザーを検索 → 名前だけ変更 → 保存しようとすると、エラーになる
  • これは、password 属性が埋まっていないから
    • DB には password_digest カラムしか存在せず、そこから元のパスワードは復元できない
    • update_attribute を使って、バリデーションを回避しつつ修正するしかない
0
0
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
0
0