Forum: Italian Ruby user group Rails: Propagazione di Validation da figlio a padre

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
74ba9c207c0b60aa996fbc7db1c28cf9?d=identicon&s=25 Carmine Moleti (carminem)
on 2007-02-07 07:38
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
74ba9c207c0b60aa996fbc7db1c28cf9?d=identicon&s=25 Carmine Moleti (carminem)
on 2007-02-07 10:31
Sono sempre io :)

> 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?
This topic is locked and can not be replied to.