Ruby on Railsで、DBにも一意性を保証する
例えばnameとemailという属性を持ったmodelを作ったときに、
モデルの属性にvalidates :uniqueness を指定しても、
完全に一意性を保証したことにはならないそうです。
解決策としては、DBにインデックスを追加することで、
DB上のデータにも一意性を保証します。
マイグレーションファイルを作る
$ rails g migration add_index_to_users_email
add_indexのオプションとして、unique: trueを指定
class AddIndexToUsersEmail < ActiveRecord::Migration def change add_index :users, :email, unique: true end end
さらに、大文字小文字を区別せずに一意性を保証するには、
model/user.rbで、保存前に小文字に変換するようにする
class User < ActiveRecord::Base before_save { self.email = email.downcase } end
参考
http://railstutorial.jp/chapters/modeling-users?version=4.0#top