Utiliser les helpers dans rails 3, à la sortie html

J'essaye de faire de mon mieux pour construire un programme d'assistance que les sorties a <'ul> composé de tous les membres d'une collection. Pour chaque membre de la collection je veux imprimer un < li> qui a un titre, et une div de liens vers CRUD le membre. C'est assez similaire à ce que les Rails de sorties pour l'échafaudage pour la vue index.

Voici l'aide que j'ai eu:

def display_all(collection_sym)
  collection = collection_sym.to_s.capitalize.singularize.constantize.all

  name = collection_sym.to_s.downcase

  html = '' 

  html << "<ul class=\"#{name}-list\">"

  for member in collection do
    html << content_tag(:li, :id => member.title.gsub(' ', '-').downcase.strip) do
     concat content_tag(:h1, member.title, :class => "#{name}-title")
     concat link_to 'Edit', "/#{name}/#{member.id}/edit"
     concat "\|"
     concat link_to 'View', "/#{name}/#{member.id}"
     concat "\|"
     concat button_to 'Delete', "/#{name}/#{member.id}", :confirm => 'Are you sure?  This cannot be undone.', :method => :delete
    end
   end

   html << '</ul>'

 return html
end 

Et que la production exactement ce que je veux. Tout d'abord, si quelqu'un pense qu'il y a une meilleure façon de le faire, n'hésitez pas à me corriger, je soupçonne que je suis en train de faire cela dans un bass ackwards façon, mais pour le moment c'est le seul moyen que je sais faire.

J'ai ensuite essayé d'envelopper les liens dans un div comme suit:

def display_all(collection_sym)
  collection = collection_sym.to_s.capitalize.singularize.constantize.all

  name = collection_sym.to_s.downcase

  html = '' 

  html << "<ul class=\"#{name}-list\">"

  for member in collection do
     html << content_tag(:li, :id => member.title.gsub(' ', '-').downcase.strip) do
     concat content_tag(:h1, member.title, :class => "#{name}-title")
     concat content_tag(:div, :class => "links-bar") do
       concat link_to 'Edit', "/#{name}/#{member.id}/edit"
       concat "\|"
       concat link_to 'View', "/#{name}/#{member.id}"
       concat "\|"
       concat button_to 'Delete', "/#{name}/#{member.id}", :confirm => 'Are you sure?  This cannot be undone.', :method => :delete
     end
   end
 end

 html << '</ul>'

 return html
end 

Cependant, j'ai maintenant plus d'obtenir toutes les balises à l'intérieur de la div.liens-bar sortie à la vue. Je suis sûr que cela doit avoir quelque chose à voir avec le bloc et les liaisons, mais je peux pas pour la vie de me comprendre à quoi ou comment le corriger. Quelqu'un peut-il offrir une aide?

  • Quelle est votre première intention utiliser les helpers? Pourquoi ne pas faire cela dans le modèle, à la place?
  • Hmmmm, je suppose que je pourrais utiliser un modèle, je ne sais pas pourquoi je n'avais pas pensé à ça.
  • les partiels est le chemin à parcourir sur ce que je pense...bravo pour labourer par le biais de ce code...mais j'ai un mal de tête peu de le lire 😉
  • Le problème de base n'est pas des blocs ou des liaisons, mais que la chaîne "html", vous êtes en train de créer est marquée comme non-HTML-fort. Vous pouvez utiliser les premières (le) de la fonction, même si, comme d'autres l'ont dit, partiels ou content_tag sont bien meilleures idées. Juste pensé que je ferais remarquer que le problème sous-jacent est, pour les gens qui sont similaires, mais différentes, des problèmes plus tard.
InformationsquelleAutor TheDelChop | 2010-08-24