100DaysOfCode 11/100

6章 つづき

長さを検証する

  • ほとんどのデータベースは255字が上限
validates :name, length: { maximum: 50}

これで「最大50文字」。かなり直感的に書けますね。

フォーマットを検証する

世のメールアドレス入力欄は、たいてい@がなかったり無効な記号が含まれる入力にエラーを返してくれます。

(テスト)assert にエラーメッセージを追加

assert @user.valid?, "#{valid_address.inspect} should be valid"
  • このように書けば、テスト失敗時にエラーメッセージが出力される

format

validates :email, format: { with: /<regular expression>/ }
  • 正規表現でフォーマットを規定できる
    正規表現は/に始まり/に終わる

  • メールアドレスは/\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i みたいな感じ (詳細は割愛)

正規表現の定数を用意しておき、formatで指定するとよいです。

一意性を検証する

  • メールアドレスがユニークであることを検証する

メールアドレスがユニークであるということは、登録しようとしているメールアドレスがデータベース内にないということです。

つまり、これまでと違いオブジェクトを生成するだけでなく、データベースに登録を行わないと検証ができません。

varidates  uniqueness: true

これでメールアドレスがユニークであることが検証できます。

varidates uniqueness: {case_sensitive: false}

こう書けば大文字小文字の区別をしません。便利。

.dup

  • duplicateの意 複製を作る

複製を作って登録すればそのアドレスはユニークではなくなるので、テストに使えます。

データベースレベルでの一意性

今のままだと、登録ボタンを連打した際に検証をパスしているのにデータベースに同様のメールアドレスが登録されてしまう、といった問題が生じることもあるようです。

インデックス

  • 今回の場合、メールアドレスにインデックス(索引)を付与することで解決する

  • rails generate migrationで新規のマイグレーションを作成し、
    add_indexでモデルの属性にインデックスを付与できる

  • 最後にunique: trueでインデックスの一意性を強制すれば、データベースレベルでメールアドレスが被らなくなる

リスト6.29まで終了

終わりに

6章を終わらせたかったのですが、かなり時間が遅くなってしまったので今日はここまで。

今回も楽しく進められましたが、いざ実践するとなると苦戦しそうな気もします。今後、ポートフォリオ作りでユーザー登録機能を実装しながら理解を深めていきたいです……!!

関連記事

この記事へのコメント

まだコメントはありません
1
@tammcの技術ブログ
1
このエントリーをはてなブックマークに追加