Domanda

Non è un qualche tipo di problema di sincronizzazione sopra letto prima. Il codice è abbastanza semplice. Il modello:

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

Il 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

ho eseguito il test, e ottengo il messaggio di errore:

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

ho eseguito lo script / console, e creare due oggetti utente con lo stesso indirizzo di posta elettronica. Va bene, si verificano alcun messaggio di convalida, i due oggetti entrambi hanno inserito nella tabella. Non so cosa c'è che non va.

Il mio rotaie versioni 2.3.8 e 1.3.0 è RSPC.

È stato utile?

Soluzione

Credo che il problema è la linea attr_accessor che avete. Se si dispone di quei nomi delle colonne, la funzione di accesso sostituirà il nome della colonna e che è solo una parte della classe e non si preoccupano di unicità. Se avete intenzione di avere i metodi di accesso quindi ha bisogno di tornare alla base di dati in qualche modo. Se avete bisogno di avere la funzione di accesso, allora avete bisogno di legarlo al database chiamando write_attribute.

Per ulteriori informazioni è possibile consultare la documentazione per "Sovrascrittura di accesso di default" a http: //api.rubyonrails.org/classes/ActiveRecord/Base.html

Spero che questo aiuta!

Altri suggerimenti

Credo che il problema è dovuto al fatto che stai dicendo:

validates_uniqueness_of :email, :on => :create

User.new potrebbe non essere innescare questa convalida. Prova a chiamare duplicate_user.save! e vedere se questo genera un errore.

Si può provare come seguire

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top