Question

Il est pas une sorte de problème de synchronisation I readed avant. Le code est assez simple. Le modèle:

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

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

Je lance le test et obtenir un message d'erreur:

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

Je lance le script / console, et crée deux objets utilisateur avec la même adresse e-mail. Il va bien, aucun message de validation se produit, les deux objets ont tous deux insérés dans la table. Je ne sais pas ce qui ne va pas avec elle.

Mes rails version 2.3.8 et rspc est 1.3.0.

Était-ce utile?

La solution

Je crois que le problème est la ligne de attr_accessor que vous avez. Si vous avez les noms de colonnes, l'accesseur remplace le nom de la colonne et qui fait partie seulement de la classe et ne se soucient pas de l'unicité. Si vous allez avoir les accesseurs alors il a besoin de revenir à la base de données d'une certaine façon. Si vous avez besoin d'avoir l'accesseur, alors vous devez l'attacher à la base de données en appelant write_attribute.

Pour plus d'informations, vous pouvez consulter la documentation pour « Écrasement accesseurs par défaut » à http: //api.rubyonrails.org/classes/ActiveRecord/Base.html

J'espère que cela aide!

Autres conseils

Je pense que la question est parce que vous dites:

validates_uniqueness_of :email, :on => :create

User.new ne peut pas être le déclenchement de cette validation. Essayez d'appeler duplicate_user.save! et voir si cela génère une erreur.

Vous pouvez essayer comme suit

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top