Frage

Es ist nicht eine Art Synchronisation Problem, das ich vor mir gelesen. Der Code ist recht einfach. Das Modell:

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

Der rspec Test:

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

ich den Test ausführen, und die Fehlermeldung:

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

ich das Skript / Konsole und zwei Benutzerobjekte mit derselben E-Mail-Adresse erstellen. Es geht in Ordnung, keine Validate Meldung auftreten, die beide sowohl in die Tabelle eingefügt haben Objekte. Ich weiß nicht, was falsch ist mit ihm.

Meine Schienen-Version ist 2.3.8 und RSPC ist 1.3.0.

War es hilfreich?

Lösung

Ich glaube, das Problem ist die attr_accessor Linie, dass Sie haben. Wenn Sie diese Spaltennamen haben, wird die Zugriffs den Spaltennamen außer Kraft setzen und das ist nur ein Teil der Klasse und kümmert sich nicht um Eindeutigkeit. Wenn Sie die Zugriffsmethoden gehen müssen, dann muss es zurück in die Datenbank in irgendeiner Weise zu erhalten. Wenn Sie die Zugriffs haben müssen, dann müssen Sie es in die Datenbank binden durch write_attribute aufrufen.

Weitere Informationen finden Sie in der Dokumentation zu „überschreiben Standard Accessoren“ unter http: //api.rubyonrails.org/classes/ActiveRecord/Base.html

Ich hoffe, das hilft!

Andere Tipps

Ich denke, das Problem ist, dass Sie sagen:

validates_uniqueness_of :email, :on => :create

User.new kann nicht diese Validierung auslösen werden. Versuchen Sie fordern duplicate_user.save! und sehen, ob das ein Fehler ausgelöst.

Sie können versuchen, wie folgt

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top