2010-06-01 2 views
3

J'ai un modèle Post. Les messages ont beaucoup de commentaires. Je veux générer un élément <ul> pour post.comments en utilisant content_tag_for.content_tag_pour une collection dans Rails?

Idéalement, il avait produit

<ul id="comments_post_7" class="comments"> 
... 
</ul> 

où 7 est l'ID de la Poste.

Le plus proche que je peux obtenir utilise

<% content-tag-for :ul post, :comments do %> 

qui produit

<ul id="comments_post_7" class="post"> 
... 
</ul> 

qui est assez proche, à l'exception du class="post". En utilisant :class => :comments dans le content_tag_for donne class="post comments", mais je veux juste class="comments".

Il semble logique que je serais capable d'utiliser quelque chose comme

<% content_tag_for :ul post.comments do %> 

mais, malheureusement, que les rendements

<ul id="array_2181653100" class="array"> 
... 
</ul> 

J'ai cherché loin. Je me sens comme si je manquais un moyen élégant de le faire. Suis-je? Parce que, sérieusement, <ul id="comments_post_<%= post.id %>" class="comments"> est douloureux.

+0

Il y a une manière spéciale de marquer le code comme du code: avec quatre espaces ou en utilisant le bouton qui lit 101 010, donc à votre code est mis en évidence et lisible comme tout le monde. – Pablo

+0

Merci pour le pourboire! – nickpatrick

Répondre

2

Vous pouvez utiliser l'option de: id et: classe

<% content_tag_for(:ul, post.comments, :id => "comments_post_#{post.id}", :class => "comments") do %> 
    xxx 
<% end %> 
+0

Merci. Je suppose que c'est un compromis raisonnable. Toujours déçu que je dois recourir à cela, cependant. Si je me trouve en train d'utiliser ce motif dans d'autres endroits, je vais probablement le factoriser dans une aide comme Shripad suggère ci-dessous. – nickpatrick

0

Je le faire en élargissant la réponse de @ Shingara: dans le posts_helper.rb:

module PostsHelper 
#This is specific only to your posts controller and only for your case!! 
#This can be made more generic though! 

def generate_ul(content) 
    content_tag(:ul, content, :class => "comments", :id => "comments_post_#{post.id}") 
end 
end 

Dans votre point de vue:

<%=h generate_ul(post.comments) %> 
Questions connexes