Pregunta

No es algún tipo de problema de sincronización I leido antes. El código es bastante simple. El modelo:

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

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

funciono con la prueba, y recibe el mensaje de error:

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

ejecuto el script / consola, y crear dos objetos de usuario con la misma dirección de correo electrónico. No hace bien, se produce ningún mensaje de validación, los dos objetos ambos han insertado en la tabla. Yo no lo que está mal con él.

Mi carriles versiones 2.3.8 y 1.3.0 es rspc.

¿Fue útil?

Solución

Creo que el problema es la línea attr_accessor que tiene. Si usted tiene esos nombres de columna, el descriptor de acceso anulará el nombre de la columna y que es sólo una parte de la clase y no se preocupa por la singularidad. Si va a tener los métodos de acceso, entonces tiene que volver a la base de datos de alguna manera. Si usted necesita tener el descriptor de acceso, entonces usted necesita para atarla a la base de datos llamando write_attribute.

Para obtener más información se puede ver la documentación de "sobreescritura descriptores de acceso por defecto" en http: //api.rubyonrails.org/classes/ActiveRecord/Base.html

Espero que esto ayude!

Otros consejos

Creo que el problema se debe a que está diciendo:

validates_uniqueness_of :email, :on => :create

User.new puede no ser desencadenando esta validación. Trate de llamar a duplicate_user.save! y ver si se genera un error.

Se puede tratar como seguir

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top