Pergunta

Não é algum tipo de problema de sincronização que li antes. O código é bastante simples. O modelo:

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

O teste 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

Eu corro o teste e recebo a mensagem de erro:

----------------------------
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
-----------------------------

Eu executo o script/console e crio dois objetos de usuário com o mesmo endereço de email. Acontece bem, nenhuma mensagem de validação ocorre, os dois objetos inseriram na tabela. Eu não sei o que há de errado com isso.

A versão do meu Rails é 2.3.8 e RSPC é 1.3.0.

Foi útil?

Solução

Eu acredito que o problema é o attr_accessor linha que você tem. Se você tiver esses nomes de colunas, o acessador substituirá o nome da coluna e isso é apenas parte da classe e não se importa com a singularidade. Se você tiver os métodos de acessórios, ele precisa voltar ao banco de dados de alguma forma. Se você precisar ter o acessador, precisará amarrá -lo ao banco de dados ligando para ligar write_attribute.

Para obter mais informações, você pode ver a documentação para "sobrescrever acessadores padrão" em http://api.rubyonrails.org/classes/activerecord/base.html

Eu espero que isso ajude!

Outras dicas

Eu acho que a questão é porque você está dizendo:

validates_uniqueness_of :email, :on => :create

User.New não pode estar acionando essa validação. Tente ligar duplicate_user.save! E veja se isso lança um erro.

Você pode tentar seguir

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top