成果物の作成4 Userモデルの作成
ログイン機能や、投稿者にユーザ名を表示するのに使います。
とりあえず制作するUserモデル
ID | name | created_at | updated_at | password_digest | |
---|---|---|---|---|---|
1 | hoge | foo@.bar.com | 作成日時 | 更新日時 | 暗号化パスワード |
後々付け足していきます。
emailに関しては一意性を確保したいので、 バリデーションに uniquenessを追加します。
urer.rb
class User < ApplicationRecord validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } #大文字小文字区別なく、重複を防ぐ end
ただ、これだけだとデータベースレベルでは一意性を保証できず、サーバが激しいトラフィックにさらされたり、
ユーザーが素早く複数回登録ボタンを押してしまうと、稀に同じデータが登録されてしまいます。
これを防ぐためにはデータベースのemail属性にインデックスを張り、重複を防ぎます。(インデックスは、列値の一意性を強制する効果もある)
なので新しくマイグレーションファイルを作成し、インデックスを追加します。
class AddIndexToUsersEmail < ActiveRecord::Migration[5.0] def change add_index :users, :email, unique: true #インデックスの追加 end end
また、平文でデータベースにパスワードを入れるのは危険なので、password_digestカラムを作成し、そこにハッシュ化されたパスワードを保存できるようにします。