Добавление html-разрыва к каждой строке в Ruby - PullRequest
0 голосов
/ 28 июня 2011

Здесь у меня в основном короткий сценарий 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

Это прекрасно работает, однако, когда он выводится в HTML, все они объединяются в кластеры, поскольку он пытается замять их в одной строке. HTML - это просто массив внутри тега сценария ruby.

<%= @sites %>

Вы можете заметить, что массив состоит из имени страницы + чего-то еще. Я подумал, что тега break будет достаточно, но Ruby это не нравится и выдает исключение неверного URI.

Есть у кого-нибудь идеи о том, как ставить разрыв строки после каждого оператора сайта. В декларации HTML? в массиве? Любая помощь оценена.

Ответы [ 3 ]

2 голосов
/ 28 июня 2011

Поскольку вы пытаетесь вывести массив, он соединяет их новой строкой \n вместо разрыва HTML. Вы можете форсировать разрыв HTML, присоединившись к тегу br:

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

В Rails 3 вам может потребоваться отключить экранирование:

<%= raw(@sites.join("<br />")) %>
0 голосов
/ 28 июня 2011

Наверное, безопаснее всего сделать это вручную в ERB:

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

или в Rails 2:

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

Таким образом, вам не нужно беспокоитьсяо возможных проблемах HTML в @sites записях.

0 голосов
/ 28 июня 2011

Я не знаком с Amemone, но я предполагаю, что page.url возвращает экземпляр класса URI. Вам необходимо преобразовать URL-адрес в строку (page.url.to_s) перед добавлением к ней.

Я бы, вероятно, оставил URL как экземпляры URI и отформатировал бы их при печати. Измените метод after_crawl на { puts @sites.join("\n") } (экземпляры URI будут автоматически преобразованы в строки).

...