validates_uniqueness_of nicht funktionieren
-
27-09-2019 - |
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.
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"