Rails: Propagazione di Validation da figlio a padre


#1

Salve a tutti,

Ho un paio di modelli siffatti:

class Client < ActiveRecord::Base
validates_presence_of :cognome, :nome, :data_di_nascita,:badge
has_one :badge

end

class Badge < ActiveRecord::Base
belongs_to :client
validates_presence_of :numero
validates_numericality_of :numero, :only_integer => true
validates_uniqueness_of :numero
validates_presence_of :tipo

private

def validate
errors.add(:client_id,“Badge già assegnato”) if (self.client_id !=
nil) and (Badge.find(:all, :conditions => “client_id =
#{self.client_id}”).size > 1)
end

end

Se dalla console di rails eseguo dei test cercando di assegnare lo
stesso badge a due client diversi,
all’esecuzione di save!, giustamente, mi viene ritornata un’eccezione.
La stessa cosa non accade se faccio come segue:
c,d = Client.find(:all)
b1,b2 = Badge.find(:all)
c.badge = b1
d.badge = b1
c.save!
d.save!

Se analizzo b1.errors.size, osservo che è 1, mentre c.valid? e d.valid?
restituiscono “true”.

L’errore sul badge non dovrebbe propragarsi anche al client che lo
contiene?
Oppure, è necessario aggiungere un controllo anche sul client?

Ringrazio in anticipo per il Vs aiuto.
Saluti


#2

Sono sempre io :slight_smile:

L’errore sul badge non dovrebbe propragarsi anche al client che lo
contiene?
Oppure, è necessario aggiungere un controllo anche sul client?

Ho trovato tra le API di Rails “validates_associates” che, da quel che
leggo,
effettua il controllo sulla validità anche degli associati.

E’ questa la strada da seguire?