Bonjour,
Dans mon application, il y a des jeux, et pour chaque jeu un forum est
créé. Lorsque l’on supprime un jeu, bien sur, il faut également
supprimer le forum (et idem en cascade pour les topics, les messages)
Deux questions :
- Y a-t-il un moyen que ça se fasse “automagiquement”, ou dois-je
absolument faire l’appel à topic.destroy dans le destroy du forum (et
en cascade pour les messages dans le destroy du topic)
- Je ne veux pas que le créateur du jeu (seul à avoir les droits
nécessaires à détruire son jeu) puisse supprimer le forum (par exemple
en faisant à la main un simple appel a
http://monsite/forum/id/delete). Comment faire pour que seule l’appli
puisse faire ça ?
Merci !
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 24 May 2008, at 11:08, Guillaume B. wrote:
Deux questions :
- Y a-t-il un moyen que ça se fasse “automagiquement”, ou dois-je
absolument faire l’appel à topic.destroy dans le destroy du forum (et
en cascade pour les messages dans le destroy du topic)
Utilise :dependent=>:destroy dans ton has_many.
- Je ne veux pas que le créateur du jeu (seul à avoir les droits
nécessaires à détruire son jeu) puisse supprimer le forum (par exemple
en faisant à la main un simple appel a
http://monsite/forum/id/delete). Comment faire pour que seule l’appli
puisse faire ça ?
Je suppose que un user has_many forums.
Si c’est bien le cas, il suffit de faire
current_user.forums.find(params[:id]).destroy
Jean-Baptiste
–
Jean-Baptiste E.
Belighted.com | Web 2.0 Consulting & Training
Email : [email protected] | Phone: +32 486 377593
Utilise :dependent=>:destroy dans ton has_many.
ok, merci, je vais essayer ça.
current_user.forums.find(params[:id]).destroy
on s’est pas compris (-;
ça, c’est pour que seul le bon utilisateur puisse détruire son forum.
ok. moi ce que je veux c’est qu’il ne puisse pas le détruire, et que
seule la destruction du jeu (qui en effet has_many forums) puisse
détruire le forum.
gUI
On 24 May 2008, at 11:27, Guillaume B. wrote:
ça, c’est pour que seul le bon utilisateur puisse détruire son forum.
ok. moi ce que je veux c’est qu’il ne puisse pas le détruire, et que
seule la destruction du jeu (qui en effet has_many forums) puisse
détruire le forum.
Alors je ne suis pas certain de comprendre ta question. Il suffit de
ne pas mettre de méthode destroy dans ton ForumsController…
–
Jean-Baptiste E.
Belighted.com | Web 2.0 Consulting & Training
Email : [email protected] | Phone: +32 486 377593
Alors je ne suis pas certain de comprendre ta question. Il suffit de
ne pas mettre de méthode destroy dans ton ForumsController…
oui !!! tout simplement.
en utilisant :dependent=>:destroy en effet je n’ai plus besoin de
méthode destroy. donc je l’ai virée.
merci beaucoup.
sinon la piste de Cyril m’interesse aussi (sait-on jamais, pour un truc
plus costaud).
mais je croyais qu’une méthode privée n’est accessible que par l’objet
lui-meme. comment un objet game peut-il invoquer une méthode privée de
forum ?
gUI
2008/5/24 Guillaume B. [email protected]:
ça, c’est pour que seul le bon utilisateur puisse détruire son forum.
ok. moi ce que je veux c’est qu’il ne puisse pas le détruire, et que
seule la destruction du jeu (qui en effet has_many forums) puisse
détruire le forum.
Justement, en utilisant un find sur une relation has_many, l’ensemble
est
scopé sur le propriétaire de la relation. En l’occurence ici, le
current_user. Donc ici, si un utilisateur loggé tente de supprimer un
forum
qui ne lui appartient pas, cela va simplement lever l’exception
ActiveRecord::RecordNotFound, a catcher donc
–
http://fabien.jakimowicz.com
2008/5/24 Guillaume B. [email protected]:
ça, c’est pour que seul le bon utilisateur puisse détruire son forum.
ok. moi ce que je veux c’est qu’il ne puisse pas le détruire, et que
seule la destruction du jeu (qui en effet has_many forums) puisse
détruire le forum.
Utilise les methodes en
privé.
–
Cyril M.
Justement, en utilisant un find sur une relation has_many, l’ensemble
est scopé sur le propriétaire de la relation. En l’occurence ici, le
current_user. Donc ici, si un utilisateur loggé tente de supprimer un
forum qui ne lui appartient pas, cela va simplement lever l’exception
ActiveRecord::RecordNotFound, a catcher donc
j’ai très bin compris ce que tu voulais dire, ce n’est pas ce que je
recherche. je fais déjà ce que tu dis pour la destruction du jeu par
exemple : seul le propriétaire peut supprimer son propre jeu.
dans le cadre du forum, je ne veux pas qu’il le détruise, je veux qu’il
y ait obligatoirement un forum par jeu. donc la seule façon de
détruire un forum est de détruire le jeu dont elle est associée.
gUI
Le 24 mai 2008 13:06, Guillaume B. a écrit :
dans le cadre du forum, je ne veux pas qu’il le détruise, je veux qu’il
y ait obligatoirement un forum par jeu.
Je ne comprends rien. Dans un autre message, tu écris :
ok. moi ce que je veux c’est qu’il ne puisse pas le détruire, et que
seule la destruction du jeu (qui en effet has_many forums) puisse
détruire le forum.
Game has_one :forum
ou Game has_many :forums ?
Déjà si on avait une vision claire des relations entre les classes
AR::B, on pourrait partir sur de bonnes bases (c’est ce que tu
aurais dû faire dès le départ dans ton post initial, ceci dit…).
-- Jean-François, qui va regarder un peu les qualifs.
–
http://twitter.com/underflow_
Je ne comprends rien.
c’est game has_one forum. c’est vrai que j’ai dis has_many après, c’est
faux. après, il me semblait que le contexte était clair )-:
récapitulons (-:
mes relations sont :
a) user has_many games
b) game has_one forum
mes exigences fonctionnelles :
- seul le propriétaire du jeu peut détruire un jeu
- le propriétaire ne peut en aucun cas détruire le forum (il est créé
automatiquement avec le jeu, et vivra autant que lui)
- bien sur, quand on détruit un jeu, on détruit le forum associé
pour le 1), on me l’a expliqué il y a un moment (voir les archives de
cette liste), la solution consiste chercher le jeu dans destroy par
“current_user.games.find(:game_id)” et ainsi seul le créateur peut
détruire son jeu. je l’ai bien compris.
pour le 2) et 3) la solution m’a été donnée par Jean-Baptiste : mettre
:dependent=>:destroy dans b), et ensuite supprimer la méthode destroy de
forum. ainsi, personne ne détruira le forum, pas meme le propriétaire.
donc j’ai la solution, élégante je pense, à mon pb. parfait.
seulement Cyril, toujours pour 2) et 3), parallèlement (donc sans du
tout tenir compte des propositions de Jean-Baptsite), m’a lâché un
“utilise des méthodes privées”. il me semble en effet que ce peut etre
une solution appropriée, et je demande juste qques explications : il me
semblait que les méthodes privées ne pouvaient pas être invoquées par
autre chose que par l’objet lui-meme, et donc je ne vois pas comment
dans le destroy de game je peux aller appeler le destroy forum.
merci pour les qques explications supplémentaires qui me feront clore
cette discussion (-:
gUI
Je ne comprends rien à tes specs.
désolé, je dois avoir trop de mal à m’exprimer.
gUI
Guillaume B. wrote:
Je ne comprends rien � tes specs.
d�sol�, je dois avoir trop de mal � m’exprimer.
gUI
A mon avis, le mieux reste la solution de jean-baptiste. Tu utilise un
:dependent=>:destroy
Dès que le jeu est supprimé, son forum l’est aussi mais tu n’as aucune
action pour détruire directement un forum. (sachant que dans ton
controlleur “game”, tu sais que seul le proprio d’un jeu peu supprimer
un forum)
Les fonctions privates seraient utilisées via des callbacks
(before_destroy par exemple) ou des observers
Enfin une petite question…si un utilisateur crée un jeu donc le forum
associé, puis supprime son jeu quelques mois plus tard (donc avec de
nombreux messages dans le forum) avant de recréer le meme jeu…le forum
se retrouve vide? un flag “actif” ne serait pas plus adapté (ok, ça
risque de surcharger et t’obliger de faire des purges régulières) ?
2008/5/24 Guillaume B. :
Je ne comprends rien à tes specs.
désolé, je dois avoir trop de mal à m’exprimer.
je crois qu’on peut s’en sortir en écrivant ça :
- seul le propriétaire du jeu peut détruire un jeu
- le propriétaire ne peut en aucun cas détruire directement le forum
- bien sur, quand on (= le propriétaire) détruit un jeu, on (= Rails)
détruit automatiquement le forum associé
Dans ce cas, il n’y a pas l’air d’avoir de contradiction.
-
et 2) sont gérés par ton système d’autorisation
et 3) c’est ActiveRecord qui gère ça comme indiqué dans un message
précédent.
– Jean-François.
–
http://twitter.com/underflow_
Le 24 mai 2008 16:02, Guillaume B. a écrit :
Je ne comprends rien.
c’est game has_one forum. c’est vrai que j’ai dis has_many après, c’est
faux. après, il me semblait que le contexte était clair )-:
pas
sûr
récapitulons (-:
mes relations sont :
a) user has_many games
b) game has_one forum
ok
mes exigences fonctionnelles :
- seul le propriétaire du jeu peut détruire un jeu
- le propriétaire ne peut en aucun cas détruire le forum (il est créé
automatiquement avec le jeu, et vivra autant que lui)
- bien sur, quand on détruit un jeu, on détruit le forum associé
D’après 1) et 3) quand le propriétaire détruit un jeu, il détruit
le forum associé et il est le seul à pouvoir le faire, ce qui
contredit 2).
Je ne comprends rien à tes specs.
– Jean-François.
–
http://twitter.com/underflow_
Les fonctions privates seraient utilisées via des callbacks
(before_destroy par exemple) ou des observers
ok, merci, je vais creuser tout ça.
meme si je suis également convaincu que c’est pas la meilleure solution,
je vais tenter de l’implémenter, juste pour l’apprendre.
Enfin une petite question…si un utilisateur crée un jeu donc le forum
associé, puis supprime son jeu quelques mois plus tard (donc avec de
nombreux messages dans le forum) avant de recréer le meme jeu…le forum
se retrouve vide?
là, c’est moi qui comprend pas ton pb (-:
si le jeu est détruit, le forum est détruit, avec tout ce qui va avec
(topics, messages)
j’ai pas précisé à quoi sert le forum : à parler de ce jeu, créé
également sur mon appli. donc si le jeu est détruit, le forum n’a plus
de raison d’etre. en tous cas c’est mon choix actuel au stade de la
maquette (peut-etre que dans un 2e temps je laisserai vivre le forum un
certain temps par exemple…)
gUI
oki, c’était simplement une question “par curiosité”, j’ai tendance a
aimer tout archiver au cas ou