各顧客に 2 個のメールアドレスを登録する

2015/12/15

問題02

Ruby on Rails で開発された顧客管理アプリケーション Baukis に関して、以下の仕様変更を行ってください。

  1. 現行仕様では顧客ひとりに対して 1 個のメールアドレスしか登録できないが、新しい仕様では 0 個以上 2 個以下のメールアドレスを登録できる。
  2. 職員は顧客の新規作成フォームまたは編集フォーム(下に載せる画面キャプチャを参照)でメールアドレスを登録する。
  3. すでにメールアドレスが登録されている場合、そのアドレスをフォームの入力欄から消去してフォームの「更新」ボタンをクリックすれば、そのアドレスのデータはデータベースから消去される。
  4. 顧客のメールアドレスに関しては、以下のバリデーションを行う。
    1. 他の顧客のメールアドレスと重複しない。
    2. 同一の顧客の 2 個のメールアドレスが重複しない。
  5. 2 個のメールアドレスを持つ顧客が Baukis にログインする際には、ログインフォームにどちらのメールアドレスを入力してもよい。
  6. 顧客のアカウント編集ページにはメールアドレスが読み取り専用で表示される。

なお、現行 Baukis と同様に職員がフォームに入力したメールアドレスは、バリデーションの前に正規化されるものとします。すなわち、いわゆる「全角英数字」は「半角英数字」に自動的に変換されます。また、メールアドレスの重複を考える場合、アルファベットの大文字と小文字を区別しません。つまり、Foo@bar.comfoo@BAR.COM は同じメールアドレスであると判定されます。ただし、メールアドレスのアルファベットを大文字から小文字に自動的に変換しません。Foo@bar.com はそのままデータベースに記録されます。

締め切り: 2016年1月12日 午前10時(日本時間)

このページは「Rails 演習問題」という連載の一部です。読者の方から答えを募り、あとで筆者が解説を追記します。詳しくは、はじめにをお読みください。

仕様の説明

以下、仕様変更後の Baukis の動きを画面キャプチャを用いて説明します。

職員として Baukis にログインして「顧客管理」画面を開き、「伊藤 一郎」さんの「編集」リンクをクリックすると次のような画面になります。

画面キャプチャ

メールアドレスの入力欄 1 と 2 に同じメールアドレスを入力して、フォームの更新ボタンをクリックすると、次のようにエラーメッセージが表示されます。

画面キャプチャ

「ito」を「ITO」に変えても、あるいは他の顧客に登録されているメールアドレスを入力しても、同様にエラーとなる点に注意してください。

メールアドレスが 2 個登録された場合、顧客一覧表のメールアドレス欄は箇条書き形式で表示されます。

画面キャプチャ

顧客はログインフォームにどちらのメールアドレスを入力しても構いません。

画面キャプチャ

顧客がアカウント(自分自身の情報)の編集フォームを開くと、次のような画面となります。

画面キャプチャ

留意事項

  • データベース設計は、読者の皆様にお任せします。
  • Gemfile に新たな Gem パッケージを追加しないでください。
  • 可能であれば RSpec によるテストを書いてください。