Methode destroy d'un model parent pas très helpful

Bonjour,

J’ai un objet parent avec une relation has_one sur un objet enfant.

Si je fais :

parent = Parent.find_by_id 1
parent.enfant.id # l’enfant existe déjÃ

j’obtiens bien l’id de l’enfant, jusque là tout va bien…

si maintenant je fais :

parent.enfant.destroy
parent.enfant.id

j’obtiens toujours l’id de l’enfant que je viens de détruire !!

si je fais à nouveau :

parent = Parent.find_by_id 1
parent.enfant.id

j’obtiens alors ce dont je m’attendais à obtenir : nil
L’enfant à bien était supprimé et le parent rechargé.

Donc, je trouve dommage que la méthode destroy ne soit finalement qu’une
requête sur la base (la destruction de l’enregistrement enfant) sans
mettre à jour le parent et qu’il faille le recharger pour le mettre Ã
jour…

Peut-être suis-je passé à côté de quelque chose ?

JD

Peut-être suis-je passé à côté de quelque chose ?

pour ma part, ce comportement ne me choque en rien. au contraire, je
m’en
sers tres souvent, par exemple :

enfant.destroy
redirect_to :action=>“lister_les_enfants”, :id=>enfant.parent.id # si
enfant
etais “destroyé” il aurait fallu d’abord sauvegarder l’id du pere

en fait je mettais ça sur le fait que “destroy” est une methode de
ActiveRecord, donc ne gère que la BdD. elle ne touche pas a l’objet
lui-meme.

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

On Nov 9, 2007 6:39 PM, Guillaume B. [email protected]
wrote:

redirect_to :action=>“lister_les_enfants”, :id=> enfant.parent.id # si
enfant etais “destroyé” il aurait fallu d’abord sauvegarder l’id du pere

en fait je mettais ça sur le fait que “destroy” est une methode de
ActiveRecord, donc ne gère que la BdD. elle ne touche pas a l’objet
lui-meme.

Je rajouterais que c’est qu’un reload qui rendrait l’objet à nil.
Reload qui est fait implicitement dans un nouveau find.


Cyril M.

Le vendredi 09 novembre 2007 à 18:42 +0100, Cyril M. a écrit :

enfant.destroy

mmm… ok ton argument tient la route :wink:
je ne connaissais pas la méthode reload qui est plus élégante que de
devoir faire à nouveau un find.
Encore merci pour ces précisions Cyril.

JD

On Nov 10, 2007 8:12 AM, Jérémy Dierx [email protected] wrote:

Peut-être suis-je passé à côté de quelque chose ?
lui-meme.
faire à nouveau un find.
Encore merci pour ces précisions Cyril.

De plus je citerais simplement la documentation qui indique dans la
méthode destroy que l’objet est freezer après le delete en BDD. Hors
la méthode #freeze() que les associations et attributes reste valide
même si l’objet est détruit.


Cyril M.