infoMore 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
:
- 複数の属性を更新
- DB への保存まで行う
- バリデーションも行う
- 単数版の
update_attribute
もあるが、こっちはバリデーションを行わない
6.2.2
- バリデーションルールはモデルクラスに書く
- バリデーションで失敗すると、そのオブジェクトの
.errors
属性が埋まる
-
user.errors.full_messages
などとして情報が取得できる
6.2.5
- モデルに
uniqueness : true
を指定すると、valid?
メソッド実行時に DB が SELECT される
- 既に存在してないかを確認するため
- 逆に言うと、
valid?
を実行するまでは errors
を取得しても何も出てこない
6.2.5
- 出てきた4つのバリデーションのうち、
presence
と uniqueness
は 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回入力してもらった方のパスワード
- いずれも、存在性とパスワード一致のバリデーション付き
- 以下のメソッドが生える
- 条件
-
password_digest
というカラムが DB に存在すること
- bcrypt gem のインストール
6.3.3
- 前述の通り
password
にはデフォルトで存在性のバリデーションがかかっているが、これは新規追加のときにしか働かないので、そのままだと全てスペースのパスワードに変更できてしまう
- これを防ぎたかったら、自分で presence バリデーションを書くしかない
- これを防ぐ必要あるのかな?全て「a」のパスワードを特に防がないのと同じ理由で、放っておいてもいい気もするけど
- なんにせよ、
password
のバリデーションを開いて修正するときは注意が必要そう
6.3.4
- DB からユーザーを検索 → 名前だけ変更 → 保存しようとすると、エラーになる
- これは、
password
属性が埋まっていないから
- DB には
password_digest
カラムしか存在せず、そこから元のパスワードは復元できない
-
update_attribute
を使って、バリデーションを回避しつつ修正するしかない
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
What you can do with signing up