アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


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