Bonjour, j'ai quelques minutes avant la pause repas alors en deux mots, voici mon avis. Tout d'abord je t'encourage à faire une seule chose par méthode, et avoir des méthodes courtes. Sans être un expert ni un prêcheur du CQRS, juste cette partie-là facilitera le refactoring et la lecture.
*Trouver* Dans ton cas, ce serait une méthode qui à chaque story, trouve l'événement "majeur", genre story.majority_event Puisque c'est un événement "spécial" (je le devine parce que tu le fais en auto), tu auras par la suite une seule méthode, et je suis sûr que tu la réutiliseras. Cette méthode est optimisable par la suite pour faire une recherche AREL avec un where, et pas un "each" (regarde AREL mais aussi Array::find ou select). *Créer* Ensuite, une méthode d'une ligne qui créé automatiquement cet événement, par exemple add_majority_event. Dans cette méthode, ça ne fait pas de mal d'aller chercher l'événement majorité s'il existe. Grâce à la méthode plus haut, c'est une ligne. *Workflow*Ensuite tu peux utiliser ton code ou les triggers de Rails pour savoir quand est-ce que cet événement se créé. Comme le code est séparé, tu pourras refactorer facilement, le mettre avant ci ou après ça... Je suis sûr que tu auras des cas marrants avec une date de naissance qui change, il faudra chercher, créer, détruire, changer... Comme tout est plus clair, et avec un garde-fou sur l'unicité, tu éviteras "par défaut" ce genre de surprises, juste en changeant ta manière de coder :) Bon courage, On Monday, September 1, 2014 11:02:51 PM UTC+2, Guillaume Betous wrote: > > Bonjour, > > Une question qui se pourrait être purement Ruby en fait, mais je soupçonne > quand même Rails de trafiquer dans mon dos :) > > J'ai des histoires (stories) dans lesquelles on peut enregistrer des > événements (events). Ce sont des ressources imbriquées classique (story > has_many events). > > A l'affichage d'une story (methode 'show') je liste les événements créés, > mais je veux en afficher d'autres, automatiquement générés. > > Exemple d'affichage d'une histoire que je cherche : > > * naissance (05/12/2000) <= c'est un événement qui a été enregistré par > l'utilisateur > * entrée école (01/09/2005) <= c'est un autre événement qui a été > enregistré par l'utilisateur > * majeur (05/12/2018) <= celui-là, c'est le modèle "story" qui le > crée à la volée, parce que on sait bien que à 18 ans il sera majeur > > Voici le code que j'ai fait. > > Dans le story_controler : > > def show > @events = @story.compute_events > end > > Dans le modèle : > > def compute_events > events = self.events > events.each do |e| > if e.name == "naissance" > x = Event.new(:name => "majeur", :date => e.date + 18.years) > events << x > end > end > return events > end > > Mon soucis c'est que ça marche... trop ! En effet, cela me crée dans la > base l'event correspondant (il a bien un nouvel id, et a bien la clée > étrangère de ma story). En reloadant ma page de "show", je vois de nouveaux > events arriver. > > * naissance (05/12/2000) > * entrée école (01/09/2005) > * majeur (05/12/2018) > * majeur (05/12/2018) > * majeur (05/12/2018) > * majeur (05/12/2018) > * majeur (05/12/2018) > * etc... > > Bref : > 1 - Comment se fait-il ? > 2 - Comment dois-je faire ? > > 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://www.libreoffice.org/download/ > -- -- Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected] --- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Railsfrance. Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [email protected]. Pour plus d'options, visitez le site https://groups.google.com/d/optout .
