2011-06-28 5 views
0

私が基本的にここに持っているのは短いルビースクリプトです(私はちょうど学び始めました)。その目的はウェブサイトをスパイダークロールしてすべてのリンクを返すことです。Rubyの各行にhtmlのブレークを追加する

@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 

が1行にそれらをジャムするtrysように、それは、この罰金は、しかし、そのがHTMLに出力されたときに、それらはすべて一緒にクラスタ化されません。 HTMLはrubyスクリプトタグ内の配列に過ぎません。

<%= @sites %> 

アレイはページ名+その他のもので構成されています。私はブレークタグで十分だろうと思ったが、Rubyはこれを気に入らず、悪いURI例外を出す。

各サイトステートメントの後に改行を挿入する方法に関するアイデアは誰にもあります。 HTML宣言では?配列の中に?すべてのヘルプが感謝しています。

答えて

0

おそらく行うための最も安全な事はERBで手動で行うことです。

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

またはレール2:

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

あなたが可能なHTMLを心配する必要はありません。この方法@sitesエントリが発行されます。

+0

私はビュー自体の中でルビーコードを使うことに興奮していませんでしたが、これは魅力的でした。ありがとうございました – overtone

+0

@overtone:あなたは書式を扱っているので、ビューの問題です。他の場所に置くと、コードの残りの部分がビューだけが気にするHTMLの問題で汚染されます。 –

2

配列を出力しようとしているので、HTML区切りではなく、改行\nと結合しています。あなたはbrタグで結ぶことにより、HTMLブレークを強制することができます

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

のRails 3では、あなたはエスケープオフにする必要があります。

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

あなたは 'simple_format @ sites.join("
")' – rubish

0

私はAmemoneに慣れていないんだけど、私は」 mをpage.urlとすると、URIクラスのインスタンスが返されます。追加する前に、URLを文字列(page.url.to_s)に変換する必要があります。

私はおそらくURIインスタンスとしてURLを残して、私は印刷するときにそれらをフォーマットします。 after_crawlメソッドを{ puts @sites.join("\n") }に変更してください(URIのインスタンスは自動的に文字列に変換されます)。

+0

を実行できます。htmlやテキストを出力しているかどうかは分かりませんでした。 HTMLをやっているなら、 '\ n'を'
'に変更してください。 – cam

関連する問題