やりたいこと
以下の2つを実現したい
- ユーザー登録した場合はemailの入力は不要
- ユーザー情報編集時、emailが空文字でも、uniqueバリデーションに引っかからないよう
- ただし、uniqueは別なもので担保
対応方法
- indexの削除
- 別のものでuniqueを担保
- email判定のロジック箇所をオーバライド
indexの削除
以下のコマンドでマイグレーション用ファイルを作成する
1
|
|
以下のように実装し、migrationを実行する
1 2 3 4 5 |
|
別のものでuniqueを担保
こちらは普通にunique制約とvalidates_uniqueness_of
を付与するのみ
とりあえずunique制約のみ
1
|
|
以下のような形でunique制約をつける
1 2 3 4 5 |
|
こんな感じにしておく
1 2 3 |
|
email判定のロジック箇所をオーバライド
emailカラムにはバリデーションが設定されているので、
これをオーバライドすることでバリデーション周りの挙動を変更できる
判定箇所を追いかけると、デフォルトで有効になっているのでここをfalseに変更する
こんな感じにしておく
1 2 3 4 5 |
|
勿論、状況によってemail_required?
が必要なこともあるのでここは要仕様検討というところでしょうか。
当たり前ですが、デカイライブラリなので、ちょっとしたことをやるだけでも結構ややこし目の実装だったりソースを読むことが必須になりますね。