サインイン機能にバリデーションを追加

TECH::CAMPを卒業するまで残すところ後1ヶ月。

平日は帰宅後、休日は1日中最終課題と個人アプリ作成を進める日々です。

 

今日は、前回実装した、deviseを使用しないサインイン・サインアップ機能に、

バリデーションを追加していこうと思います。

 

Usersテーブルは

・username

・email

・password_digest

で成り立っています。(created_at などは省略)

以下のようにバリデーションをかけます。

 

・username

 入力必須

 15文字以内であること

 

・email

 入力必須

 一意性あり

 メールアドレスの形になっていること

 

・password

 入力必須

 8文字以上であること

 

 

実際のバリデーションコード

 

入力必須は簡単です。モデル(user.rb)に

validates :username, presence: true

 

と書けば、username は入力必須になります。

 

上記の続きで文字数を制限するには

validates :username, presence: true, length: {maximum: 15}

という風に記入します。

 

次にメールアドレスの一意性

validates :email,uniqueness: {case_sensitive: false},

大文字小文字の区別なく一意でなくてはならないということです。

(今回のアプリでは保存時にメールアドレスを小文字に変換するため)

 

次にメールアドレスの形になっているかどうか。

こちらは正規表現を用います。(勉強中・・)

validates :email,
presence: true,
uniqueness: {case_sensitive: false},
format: {with: /\A[\w+\-_.]+@[a-z\d\-_.]+\.[a-z]+\z/i}

\w ・・・英数字

+   ・・・直前の文字が1回以上繰り返される

\-_.   ・・・「-」「_」「.」の記号は使用できる

i  ・・・大文字小文字を区別しないというオプション 

 

次はこのバリデーション 達についてのテストコード を書いていきます。

 

 

まとめ

バリデーションについては、正規表現が一番難しいと思いました。

正規表現理解できればフォーム作成の幅が広がりそう!

しかも、理系っぽくてかっこいい!(わたしは文系)

ので、しっかり勉強しようと思います。

 

ただ、サイト色々探しては見たもののサンプルコードがワンパターンでどうもなあ・・

お盆休みはステイホームなのでAMAZON正規表現の本があるかどうか探してみます。