Я использую петли и счетчик, чтобы вывести нумерованный список предметов. Он перечисляет их все сразу под 1, а затем 2 - еще один раунд перечисления всех элементов.
Цикл while
не работает, и я подумал, что until
было лучше. Я также переместил counter
за пределы первой итерации, но это тоже не сработало.
require 'pry'
require 'rubygems'
require 'open-uri'
require 'nokogiri'
class KefotoScraper::CLI
def initialize
@product_names = []
@page_url = "https://kefotos.mx/"
end
def call
puts "These are the services that Kefoto offers:"
list_products
end
private
def home_html
Nokogiri::HTML(open(@page_url))
end
def service_names
@service_names = home_html.css(".nav-link").map do |link|
link['href'].to_s.gsub(/.php/, "")
end
@service_names.each do |pr|
@product_names << pr
end
@product_names
end
def list_products
i = 1
n = 0
until @product_names.length < n do
@product_names.each {|list_item| puts "#{i} #{list_item}"}
i += 1
n += 1
end
end
def service_links
@service_links ||= home_html.css(".nav-item").map { |link| link['href'] }
end
end
Список повторяется снова и снова.
[3] pry(#<KefotoScraper::CLI>)> @product_names
=> ["foto-enmarcada", "impresion-fotografica", "photobooks", "impresion-directa-canvas", "impresion-acrilico", "fotoregalos"]
[4] pry(#<KefotoScraper::CLI>)> list_products
1 foto-enmarcada
1 impresion-fotografica
1 photobooks
1 impresion-directa-canvas
1 impresion-acrilico
1 fotoregalos
2 foto-enmarcada
2 impresion-fotografica
2 photobooks
2 impresion-directa-canvas
2 impresion-acrilico
2 fotoregalos