2010-11-10 16 views
2

J'ai une collection, @comments, qui est hétérogène mais hiérarchique. Chaque commentaire est une instance de Comment ou une classe dérivée, comme ActionComment ou InactionComment. Je rends un partiel différent pour chaque type de commentaire. Le code View est:Rendu d'une collection hétérogène: Comment puis-je spécifier un répertoire unique pour les partiels?

= render @comments

Comme tous les partials sont liés, je voudrais les garder dans un répertoire de vue unique, à savoir:

  • app/views/commentaires/_comment.haml
  • app/vues/commentaires/_action_comment.haml
  • app/views/commentaires/_inaction_comment.haml

Mais en ce moment pour utiliser le rendu automatique du je partielle correcte, en utilisant des répertoires distincts, comme:

  • app/views/commentaires/_comment.haml
  • app/views/action_comments/signalement. hAML
  • app/views/inaction_comments/_inaction_comment.haml

Répondre

1

vous ne pouvez pas le faire comme par magie tout à fait, mais vous pouvez le faire simplement en rendant chaque élément individuellement et en spécifiant le partiel.

exemple haml:

- @comments.each do |c| 
    = render :partial => "comments/#{c.class.to_s.underscore}", :locals => {:comment => c} 
+0

Cette réponse a très bien fonctionné pour Rails <3.2. Je change ma réponse acceptée pour être à jour avec la version actuelle de Rails. – colllin