J'ai deux petits problèmes structurels que je ne suis pas sûr de savoir comment gérer compte tenu de mon relative newbie-ness avec RoR.Comment puis-je réduire ce code Ruby/Rails très répétitif?
Première question: Dans un de mes vues, j'ai le code qui ressemble à ceci:
<ul style="list-style-type: circle">
<li><%= @apples.size %> apples</li>
<li><%= @oranges.size %> oranges</li>
<li><%= @bananas.size %> bananas</li>
<li><%= @grapefruits.size %> grapefruits</li>
</ul>
Est-il possible de refactoriser cela pour que je ne dois itérer une fois sur une liste des différents types de fruits, et avez les <li>
appropriés être générés automatiquement? Modifier: J'ai oublié d'ajouter que @apples
, @oranges
, etc., pourrait être nil
. Existe-t-il une façon idiomatique de gérer cela?
Deuxième question: Dans mon contrôleur, j'ai le code qui ressemble à ceci:
@apples = Apple.find(:all)
@apples.each { |apple| apple.do_stuff(:xyz) }
@bananas = Banana.find(:all)
@bananas.each = { |banana| banana.do_stuff(:xyz) }
# ... &c
Comme vous pouvez le voir, la même opération est invoquée à plusieurs reprises exactement de la même manière. Y at-il un moyen de raccourcir cela à quelque chose comme [Apple.find(:all), ...].each { |fruit| ... }
et avoir ce travail à la place?
Merci beaucoup pour votre aide!
Merci beaucoup pour votre réponse. C'est semblable à ce que j'ai fini par faire. J'ai effectivement un modèle Fruit, et Apple, Banana, et al., Tous en dérivent. Mais je voulais juste appeler "do_stuff" sur certains types de fruits, pas tous. Woot! –