Merci pour celle là. On en apprend tous les jours ;) 2015-02-12 22:47 GMT+01:00 Étienne Barrié <[email protected]>:
> Désolé pour le retard et le up mais quand j'ai lu le titre ça m'a fait > penser à `to_partial_path` mais je l'ai pas vu mentionné dans les réponses > ou les liens. > > La convention de Rails (ActiveModel plus précisément) pour savoir comment > render un object Ruby, c'est d'appeler `to_partial_path` dessus. Tu peux > voir ça facilement en essayant dans une vue <% render Object.new %>, qui te > donnera une erreur: > > ArgumentError - '#<Object:0x007fb84ceed390>' is not an > ActiveModel-compatible object. It must implement :to_partial_path. > > Si tu implémentes cette méthode et retournes une valeur habituelle pour un > partial, comme 'foobar/baz' il ira chercher dans ton view path, ce qui te > permet d'avoir un fichier comme app/views/foobar/_baz.html.erb. Dans cette > vue, l'objet lui-même est accessible selon le nom du fichier, dans ce cas > tu pourras y accéder avec `baz`. > > Ça n'empêche pas du tout d'utiliser des presenters ou decorators, c'est > même là que c'est utile parce que Rails fournit déjà `to_partial_path` sur > les ActiveRecord::Base (via ActiveModel::Conversion). > > 2015-01-22 11:11 GMT-05:00 Philippe Creux <[email protected]>: > > Ok avec Guirec sur la définition de Decorator (enrobe un objet) et >> Presenter (enrobe plusieurs objets et offre des méthodes qui combinent des >> propriétés de ces objets) >> >> >> On Thu Jan 22 2015 at 6:49:24 AM Tim <[email protected]> wrote: >> >>> @Julien >>> Si ça peut te rassurer, ce que j'ai noté ici je ne le respecte pas >>> toujours à la lettre, c'était pour guider le topic. J'ai noté contrainte, >>> mais c'est plus "J'essaie de suivre les best pratice de base". >>> >>> Ces contraintes ont clairement fais leur preuves dans mes devs, grâce à >>> ça j'ai éliminé une tonnes de bug (j'ai récupéré l'appli apres un premier >>> prototype), et j'ai pas mal accéléré la vitesse d'ajout de feature. >>> >>> >>> Le jeudi 22 janvier 2015 15:40:43 UTC+1, Archiloque a écrit : >>>> >>>> Hello, >>>> >>>> je trouve que tu t’imposes beaucoup de contraintes: avoir des principes >>>> c’est bien quand ça apporte des choses, mais quand ils se transforment en >>>> contraintes qui vont t’ajouter de la complexité seulement pour respecter >>>> des règles à la lettre je préfère être accommodant. >>>> >>>> #require ‘troll sur j2e' >>>> >>>> Julien >>>> >>> >>>> Le 22 janv. 2015 à 15:06, Tim <[email protected]> a écrit : >>>> >>>> Salut à tous >>>> >>>> Question purement théorique, mon problème étant déjà résolue, mais >>>> j'aimerais tout de meme savoir si il existe une autre (surement) voir une >>>> meilleure facon de le résoudre. >>>> >>>> >>>> Le problème est simple, >>>> j'ai très souvent des vues qui nécessitent la combinaison de trois >>>> objets pour afficher toutes les informations nécessaires. >>>> Je m'impose comme contraintes : >>>> - éviter toute logique dans le code html >>>> - éviter de passer plus d'1 objet à ma vue (j'utilise render: >>>> 'ma/page', locals: ... ) >>>> - ne pas utiliser les helpers de rails (Des modules chargé sur toutes >>>> les pages ? non merci) >>>> - ne pas utiliser de décorateur (comme le gem drapper) car je vais me >>>> retrouver avec un fichier de 600 lignes car je vais cumuler toutes les vue >>>> dans ce même fichier. >>>> >>>> Je vais tenter un exemple pour vous montrer ce que j'ai fait : >>>> >>>> Je veux afficher la page admin/articles/:id >>>> Sur cette page, je veux toutes les informations lié à cette article (de >>>> pres ou de loin et avec des statistiques sur le mois précédent): >>>> nombre de fois consulté, provenance géographique, différence avec le >>>> mois précédent....etc >>>> >>>> En gros pour afficher toutes les informations sur ma page j'ai besoin >>>> des objets : >>>> Article, Provenance, Consultation, et Statistique(Consultation, >>>> Consultation - 1.month) >>>> >>>> Ce que j'ai fait >>>> j'ai créé un dossier app/views_helper dans lequel j'ai créé le fichier >>>> article_show.rb (qui est juste class ArticleShow; def initialize(...); end >>>> ......) >>>> Je l'instancie avec mes 3 objets, et je définis les méthodes utile pour >>>> la vue. >>>> Ca fonctionne très bien, le code est facilement testable. >>>> >>>> Le probleme : Lorsque quelqu'un va reprendre mon code, comment va-t-il >>>> faire le lien entre app/views_helper/article_show.rb et >>>> admin/articles/:id ? (certe en lisant le controlleur, là ou je l'instancie >>>> avant de le passer à ma vue) >>>> Existe t'il une convention qui normalise l'utilisation d'une classe >>>> directement lié à une vue ? >>>> Est ce que cette idée de classe lié à une vue est une hérésie ? >>>> >>>> Au départ je contais mettre mes classes directement dans >>>> app/views/articles/mon_objet_pour_show.rb mais Rails ne la trouvait >>>> pas. >>>> Et vous, comment codez vous vos vues complexes ? >>>> >>>> Dans l'attente de vos réponses, merci de votre attention ;) >>>> >>>> Bon dev. >>>> >>>> -- >>>> -- >>>> 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 railsfrance...@ >>>> 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 >>> [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 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 >> [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 obtenir davantage d'options, consultez la page >> https://groups.google.com/d/optout. >> > > > > -- > Étienne Barrié > > -- > -- > 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 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 [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 .
