validates_uniqueness_of не работает - PullRequest
       32

validates_uniqueness_of не работает

0 голосов
/ 11 августа 2010

Это не какая-то проблема синхронизации, которую я читал раньше.Код довольно прост.Модель:

class User < ActiveRecord::Base
    attr_accessor :name, :email
    validates_uniqueness_of :email, :on => :create, :message => "must be unique"
 end

Тест rspec:

require 'spec_helper'
describe User do
    before(:each) do
       @valid_attributes = {
           :name => "Foo Bar",
           :email => "foo@bar.com"
        }
     end  
    it "should reject duplcate email address" do
        User.create!(@valid_attributes)
        duplicate_user = User.new(@valid_attributes)
        duplicate_user.should_not be_valid
     end
  end

Я запускаю тест и получаю сообщение об ошибке:

----------------------------
1)
'User should reject duplcate email address' FAILED
expected #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil> not to be valid
/Users/mac/workspace/rails_space/uniq/spec/models/user_spec.rb:14:

Finished in 0.067908 seconds

1 example, 1 failure
-----------------------------

Я запускаю скрипт / консольи создайте два пользовательских объекта с одинаковым адресом электронной почты.Все идет нормально, сообщение проверки не происходит, оба объекта вставлены в таблицу.Я не знаю, что с этим не так.

Моя версия rails 2.3.8, а rspc 1.3.0.

Ответы [ 3 ]

1 голос
/ 11 августа 2010

Я считаю, что проблема в том, что у вас есть строка attr_accessor.Если у вас есть эти имена столбцов, средство доступа переопределит имя столбца, и это только часть класса, и его не волнует уникальность.Если вы собираетесь использовать методы доступа, тогда он должен каким-то образом вернуться в базу данных.Если вам нужен аксессор, вам нужно привязать его к базе данных, вызвав write_attribute.

Для получения дополнительной информации см. Документацию по «Перезаписи доступа по умолчанию» на http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Надеюсь, это поможет!

1 голос
/ 11 августа 2010

Я думаю, что проблема в том, что вы говорите:

validates_uniqueness_of :email, :on => :create

User.new, возможно, не запускает эту проверку.Попробуйте позвонить duplicate_user.save! и посмотрите, не выдаст ли это ошибку.

0 голосов
/ 11 августа 2010

Вы можете попробовать как следует

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...