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 .

Répondre à