Si comprends bien tu veux avec des informations sur plusieurs modèles dans
une même page.

As-tu pensé à faire un presenter :
http://eewang.github.io/blog/2013/09/26/presenting-the-rails-presenter-pattern/
? En gros tu pourrais faire une classe comme ceci :

class ArticlePresenter
  def initialize(article:, provenance:, consultation:, statistique:)
    #...
  end

  def sum_of_constulations_by_month
    # return the sum of consultations for the last year by month
  end

  #...
end

Tu mets toute la logique dans cette classe qui est celle que tu instancies
dans ton controller et que tu renvois à ta vue. Il y a également le facade
pattern : https://medium.com/@ryakh/facade-pattern-on-rails-d65b86cdb5b1 .
Je pense que c'est un peu la même chose mais je ne m'y suis jamais attardé
en profondeur.

Qu'en penses-tu?


Le Thu Jan 22 2015 at 09:06:14, Tim <itsumo.sibyl...@gmail.com> 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
> 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 à