validates_uniqueness_of no hacer el trabajo
-
27-09-2019 - |
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.
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"