Tableau à double entrées et séparation des couches

Tableau à double entrées et séparation des couches - Ruby/Rails - Programmation

Marsh Posté le 01-03-2011 à 16:08:02    

Bonjour à tous.

 

J'ai un petit problème de séparation des couches :o
J'ai un tableau à doubles entrées:

 

http://hfr-rehost.net/preview/self/pic/5c3a3ba40edc11884cce312c70d306e0298eaab9.png

 

Le problème est le suivant :

 

RTD Activities et Management sont des sections, et Human resources sont des sous-sections. Là on affiche la somme des Invoices (factures) par trimestre, en sachant que chaque facture appartient à une section et une sous-section. Il peut y avoir N sections et chacune peut avoir un nombre différent de sous-sections.

 

Mon problème actuel est que je n'arrive pas à trouver de manière efficace de séparer mes couches. En l'occurence j'ai ma vue (index), qui appelle un partial avec "sections" comme collection, ce partial appelle lui-même un autre partial avec "section.sous-sections" comme collection, celui-ci appelle un 3ème partial avec "trimestres" comme collection, et au final j'ai un spendide :

 
Code :
  1. <%=Invoice.where(:section_id=>section_id,
  2.                     :subsection_id=>subsection_id,
  3.                     :created_at => (quarter.qstart..quarter.qend)).sum(:amount)
  4. %>
 

Ce que je trouve moyen vu qu'on appelle le modèle directement depuis la vue.

 

Vous feriez comment vous? Parce que recréer une moulinette côté contrôleur qui me remplisse un mega tableau, qu'après je vais interroger dans la vue ça me semble
- Juste un tit petit peu plus propre
- Chiant/lent/lourd à faire

 

Merci :jap:


Message édité par esox_ch le 01-03-2011 à 16:08:21

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-03-2011 à 16:08:02   

Reply

Marsh Posté le 02-03-2011 à 11:16:01    

Je partirais sur une map Section => Invoices, effectivement construite par le contrôleur.
 
Dans ta vue, si la valeur pour la clé est nulle, tu render ton partial section, sinon, tu render le partial de sous section + trimestres. Ça allège le traitement dans le partial de trimestre. Un compromis quoi.
 

Reply

Marsh Posté le 02-03-2011 à 11:18:52    

Hello,
 
Merci pour ta réponse. Mais alors ça serait un map section=>sous_sections=>invoices, non?
Justement j'étais parti sur ça mais c'est chiant parce que ça m'oblige à mettre plein de moulinettes dans le controlleur, et qu'au final je n'y gagne pas (à mon sens) grand chose niveau clarté.
T'en penses quoi?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-03-2011 à 11:35:42    

Tel que je le vois, section et sous section sont du même type, une section est une sous section sans parent, et inversement.
 
Du coup, la construction de la map dans le contrôleur est légère, et le traitement dans les partial pas trop lourd non plus.

Reply

Marsh Posté le 02-03-2011 à 12:55:37    

Salut,
 
Peut-être que c'est "sous-section" qui est mal choisi comme nom. Dans le sens que ce que j'appelle une "sous-section" (par exemple le HR) ne peut pas être une section, et Management ne peux pas être une sous-section.
Il y a de plus certains attributs qu'une section a qu'une sous-section n'a pas (et vice-versa).
C'est pour cette raison que j'ai créé 2 objets différents. Tu vois le truc?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-03-2011 à 13:47:36    

Oui je comprend, mais ça ne me semble pas empêcher l'existence à minima d'un super type. Avec un peu de STI pour traiter les différents champs, ça passe tout seul.

 

Sinon, si tu es vraiment coincé par la structure, pas mieux que ce que tu exposes dans ton premier post. Cependant, le souci selon moins provient vraiment de ton modèle de données.


Message édité par LeRiton le 02-03-2011 à 13:47:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed