# Comportamento inatteso di validates\_associated (bug? capito

**URL:** <https://www.ruby-forum.com/t/comportamento-inatteso-di-validates-associated-bug-capito/101507>\
**Category:** IT\
**Created:** [August 5, 2006, 2:51pm UTC](https://www.ruby-forum.com/t/comportamento-inatteso-di-validates-associated-bug-capito/101507 "2006-08-05T14:51:04Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![rik0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/8dc957/32.png) [@rik0](https://www.ruby-forum.com/u/rik0)\
**Post date:** [August 5, 2006, 2:51pm UTC](https://www.ruby-forum.com/t/comportamento-inatteso-di-validates-associated-bug-capito/101507/1 "2006-08-05T14:51:04Z")

</div>

Stavo scrivendo un po’ di codice di test, quando mi sono accorto che  
validates\_associated lasciava passare un sacco di roba che invece  
avrebbe dovuto bloccare (secondo me).

Quale è l’arcano? facciamoci un semplice esempio:

class B \< ActiveRecord::Base  
belongs\_to :a

validates\_presence\_of :a\_id  
validates\_associated :a  
end

class A \< ActiveRecord::Base  
has\_many :b  
end

Supponiamo che non abbiamo nessun oggetto A con id superiore a 10.  
Questo codice inserirà nel DB l’oggetto creato:

b = B.create(:a\_id=\>0)

Questo pure

b = B.create(:a\_id=\>99)

Quale è l’arcano?

In sostanza validates\_associated manda a b.a il messaggio nil? e in caso  
contrario valid?. Solo che b.a _è_ nil, in quanto non gli ho passato  
alcunchè come :a, ma solo come :a\_id).

Lo stesso codice se ho implementato le foreign keys lato DB da  
chiaramente errore (come mi aspettavo). Se questo non è molto grave, nel  
caso in cui abbia un rapporto “molti a molti” attraverso dei through, si  
ottengono risultati assurdi (posso fare esempio, ma direi che si riesce  
a capire dove sia il problema).

Come dire… probabilmente la mia illusione che potessi gestire tutto da  
rails senza scendere a codice db specifico era vana. La cosa confesso  
che mi secca tantissimo, anche se in effetti il mio è un uso un po’  
improprio del tutto (ma uso che tuttavia di tanto in tanto potrebbe  
venire comodo). Soprattutto io non ho letto da nessuna parte che non si  
possa fare, anche se il metodo consigliato è chiaramente

B.create(:a=\>…)

–  
blog: [http://www.akropolix.net/rik0/blogs](http://www.akropolix.net/rik0/blogs) | Enrico F.  
site: [http://www.akropolix.net/rik0/](http://www.akropolix.net/rik0/) | RiK0  
forum: [http://www.akropolix.net/forum/](http://www.akropolix.net/forum/) | Linux Counter: #299198
