Voeg css class toe aan individuele tags in Rails met acts_as_taggable_on

Het gebruik van de acts_as_taggable_on werkt prima. Maar genereert een door komma's gescheiden lijst. Ik vraag me af hoe je een wrapper-element en -klasse het beste kunt toevoegen aan elk afzonderlijk. Ik heb het in jQuery kunnen doen, maar ik doe het liever in een rails-helper.

d.w.z.

item.tags = "big, bigger, biggest"
item.tag_list = ["big", "bigger", "biggest"]

te renderen als:

big
bigger
biggest
0

2 antwoord

Hier is een helper die een lijst met spaties kan genereren op basis van de taglist die is verzonden.

def tags(tag_list)
  markup = ""
  tag_list.each do |tag|
    markup += content_tag(:span, tag, :class => "tag")
  end
  raw(markup)
end

Je zou het dan met:

<%= tags(item.tag_list) %>

welke zal uitvoeren

tag 1
tag 2
tag 3
2
toegevoegd
bijgewerkte code, werkte niet nadat het testen nu werkt
toegevoegd de auteur nheinrich, de bron
Graag gedaan!
toegevoegd de auteur nheinrich, de bron
Ik hou hiervan. werkt perfect. Heel erg bedankt nheinrich ...
toegevoegd de auteur Adam, de bron

Dit kan een schonere manier zijn om het te doen zonder een nieuwe functie te creëren en de code in het zicht te houden:

<% @item.tag_counts_on(:tags).map(&:name).each do |tag| %>
   
    <%= tag %> 
<% end %>
1
toegevoegd
+1 schonere aanpak
toegevoegd de auteur lucapette, de bron