validates_uniqueness_of перед ActiveRecord :: RecordNotUnique - PullRequest
2 голосов
/ 15 октября 2011

У меня есть следующий класс в приложении Rails 3.1.1:

class User < ActiveRecord::Base  
  attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :admin, :moderator, :bio
  validates_presence_of :username
  validates_uniqueness_of :username, :case_sensitive => false
  validates_uniqueness_of :email,  :case_sensitive => false

и в моих миграциях:

add_index :users, :email,                :unique => true
add_index :users, :username,             :unique => true

Однако, когда я пытаюсь создать двух пользователей с дубликатомэлектронные письма или имена пользователей Я получаю исключение уровня БД, а не неудачную проверку:

ActiveRecord::RecordNotUnique in RegistrationsController#create
PGError: ERROR:  duplicate key value violates unique constraint "index_users_on_username"

Существуют другие проверки, которые отлично работают, но почему проверки уникальности не выполняются до создания БД?

1 Ответ

0 голосов
/ 10 ноября 2011

Попробуйте что-то вроде этого:

class User < ActiveRecord::Base
  attr_accessible :email, 
              :password, 
              :password_confirmation, 
              :remember_me, 
              :username, 
              :admin, 
              :moderator, 
              :bio
  validates :username, :uniqueness => { :case_sensitive => false }, :presence => true
  validates :email,    :uniqueness => { :case_sensitive => false }
...