2011-06-28 3 views
0

Ce que j'ai essentiellement ici est un script ruby ​​court (j'ai juste commencé à apprendre) et le but de cela est de spider-crawl un site Web et de renvoyer tous les liens qu'il trouve.Ajout de sauts html à chaque ligne dans Ruby

@sites = Array.new 
Anemone.crawl("http://www.nemecisco.com/") do |anemone| 
    anemone.on_every_page do |page| 
    puts page.url 
    @sites<<page.url+"" #heres where i add something to give it a line break i think 
    end 
    anemone.after_crawl { puts @sites } 
end 
end 

Il le fait bien, mais quand son être au code HTML émis en sortie, ils sont tous regroupés comme trys pour les bloquer sur une ligne. Le HTML est juste le tableau à l'intérieur de la balise de script ruby.

<%= @sites %> 

Vous pouvez remarquer que le tableau est composé du nom de pages + autre chose. Je pensais qu'une balise de rupture suffirait mais Ruby n'aime pas ça et donne une mauvaise exception d'URI.

Est-ce que quelqu'un a des idées sur la façon de mettre un saut de ligne après chaque déclaration de site. Dans la déclaration HTML? dans le tableau? Toute aide a été appréciée.

Répondre

0

Probablement la meilleure chose à faire est de le faire manuellement dans le ERB:

<% @sites.each do |site| %> 
    <%= site %><br> 
<% end %> 

Ou dans Rails 2:

<% @sites.each do |site| %> 
    <%=h site %><br> 
<% end %> 

De cette façon, vous n'avez pas à vous soucier possible HTML émet les entrées @sites.

+0

Je n'étais pas ravi d'utiliser le code ruby ​​dans la vue elle-même, mais cela a fonctionné comme un charme. Merci beaucoup – overtone

+0

@overtone: Vous avez affaire à la mise en forme, donc c'est le problème de la vue, en mettant que n'importe où d'autre polluerait le reste de votre code avec des préoccupations HTML que seule la vue devrait prendre en compte. –

2

Puisque vous essayez de sortir un tableau, il se joint à eux avec une nouvelle ligne \n au lieu d'un saut HTML. Vous pouvez forcer une rupture HTML en se joignant à une étiquette br:

<%= @sites.join("<br />") %> 

Dans Rails 3, vous devrez peut-être désactiver échapper:

<%= raw(@sites.join("<br />")) %> 
+1

alors vous pouvez faire 'simple_format @ sites.join ("
")' – rubish

0

Je ne suis pas familier avec Amemone, mais je m en supposant que page.url renvoie une instance de la classe URI. Vous devez convertir l'URL en une chaîne (page.url.to_s) avant de l'ajouter.

Je laisserais probablement les URLs en tant qu'instances URI, et les formaterai lorsque j'imprimerai. Remplacez votre méthode after_crawl par { puts @sites.join("\n") } (les instances URI seront automatiquement converties en chaînes).

+0

Vous ne saviez pas si vous produisiez du texte ou du texte html. Changez le '\ n' en'
'si vous faites du HTML. – cam

Questions connexes