Je pense que tu peux utiliser la méthode #select :
http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-select . Je crois
encore que mon approche est la bonne mais je ne connais pas tout ton
programme. Je ne vois pas pourquoi tu devrais ajouter des événements dans
l'ordre si, pour certain, tu donnes un comportement spécial. Le fait
d'aller en prison peut modifier la date de la majorité. De plus, je crois
que ça colle plus à la réalité. De tout façon, je crois que ça demanderais
plus de temps pour y penser.

Le 10 septembre 2014 02:48, Guillaume Betous <guillaume.bet...@gmail.com> a
écrit :

> Salut c'est encore moi !
>
> Pour l'instant je maintiens mon approche. En effet, celle que tu m'as
> montré impose tout de même que les événements soient créés dans l'ordre
> chronologique : si on fait le traitement lors de la création, cela signifie
> que à ce moment précis il faut que tous les événements influençables soient
> déjà créés.
> Mon approche permet de s'en affranchir : on crée dans l'ordre que l'ont
> veut, et c'est lors de la consultation de la story (suite d'événements)
> qu'on fait le traitement et qu'on modifie les événements en fonction
> d'autres événements.
>
> Je reste avec un code qui est peu ou prou :
>
> def compute_events
>   # create deduced events
>   events.each do |e|
>     if e.naissance?
>       event.build(:name => "majeur", :date => e.date + 18.years)
>     end
>   end
>   return events.sort_by &:date
> end
>
> Ma question est que, toujours dans cette méthode, je veux repasser
> l'ensemble de mes événements, et effectuer des recherche dans cette liste
> (c'est la partie "les événements influencent d'autres événements" : je les
> repasse tous et j'annule ou modifie les événements ultérieurs).
> Si j'utilise "events.where()", je lance une requête SQL dans la table, et
> je ne trouverai donc pas les événements créés précédemment par le build().
> J'ai tenté le scope, mais il se passe la même chose : requete SQL.
>
> Comment faire ?
>
> Merci !
>
> gUI
>
> Le 2 septembre 2014 17:24, Guirec Corbel <guirec.cor...@gmail.com> a
> écrit :
>
>> Et pourquoi ne pas faire un cas du genre :
>>
>> class Story
>>   def prison!
>>     event = events.find(type: Event::MAJORITY)
>>     event.update_attribute('date', event.date + 3.years)
>>   end
>> end
>>
>>
>> Le 2 septembre 2014 11:09, Guillaume Betous <guillaume.bet...@gmail.com>
>> a écrit :
>>
>>>
>>> Pourquoi n'ajoutes tu pas un événement persistant à la création de
>>>> l'événement "naissance" plutôt que de l'ajouter "à la volé"?
>>>>
>>>
>>> J'ai anonymisé l'appli (rien à voir avec des naissances et des âges de
>>> majorité) et en réalité il y a énormément d'événements enregistrés qui
>>> influent sur ces événements générés. C'est comme si un accident de la vie
>>> faisait que tu ne sois pas majeur à 18 ans. Ou plus tôt. Imaginons que ce
>>> soit le cas avec un emprisonnement qui te décale ta majorité, ou que le
>>> mariage te donne une majorit anticipée.
>>>
>>> Du coup une fois ma liste "enrichie" générée, je vais la re-parcourir
>>> pour la vider des aberrations (style tu es 2x majeur dans ta vie, à 17 ans
>>> et à 18 ans). Les événements enregistrés, eux, sont intangibles. Ca c'est
>>> réellement passé. Les autres, c'est justement le but de l'appli, sont là
>>> pour te donner les jalons qui t'attendent.
>>> Le UseCase typique (et toujours anonymisé :) : "bonjour, je me suis
>>> marié à 17 ans et demi, mais j'ai fais 3 mois de prison à l'âge de 15 ans,
>>> à quel âge serai-je majeur ?"
>>>
>>> Bref c'est encore un peu compliqué dans ma tête, et comme il n'y aura
>>> qu'une dizaine d'événements dans une story, je me suis dit que
>>> l'implémentation naïve était finalement peut-être pas si mauvaise.
>>>
>>> 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
>>> railsfrance@googlegroups.com
>>> Pour résilier votre abonnement envoyez un e-mail à l'adresse
>>> railsfrance-unsubscr...@googlegroups.com
>>> ---
>>> 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
>>> railsfrance+unsubscr...@googlegroups.com.
>>>  Pour obtenir davantage d'options, consultez la page
>>> https://groups.google.com/d/optout.
>>>
>>
>>  --
>> --
>> 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
>> railsfrance@googlegroups.com
>> Pour résilier votre abonnement envoyez un e-mail à l'adresse
>> railsfrance-unsubscr...@googlegroups.com
>> ---
>> 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
>> railsfrance+unsubscr...@googlegroups.com.
>> Pour obtenir davantage d'options, consultez la page
>> https://groups.google.com/d/optout.
>>
>
>
>
> --
> 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
> railsfrance@googlegroups.com
> Pour résilier votre abonnement envoyez un e-mail à l'adresse
> railsfrance-unsubscr...@googlegroups.com
> ---
> 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
> railsfrance+unsubscr...@googlegroups.com.
> Pour obtenir davantage d'options, consultez la page
> https://groups.google.com/d/optout.
>

-- 
-- 
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 
railsfrance@googlegroups.com
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
railsfrance-unsubscr...@googlegroups.com
--- 
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 railsfrance+unsubscr...@googlegroups.com.
Pour plus d'options, visitez le site https://groups.google.com/d/optout .

Répondre à