[ruby-it] Comportamento inatteso di validates_associated (bug? capito male io? cosa?)

Enrico Franchi rik0.py a gmail.com
Sab 5 Ago 2006 14:50:13 CEST


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 | Enrico Franchi
site:  http://www.akropolix.net/rik0/      | RiK0
forum: http://www.akropolix.net/forum/     | Linux Counter: #299198


Maggiori informazioni sulla lista Ml