我正在使用循环和计数器来列出编号的项目列表。它一次将所有项目都列在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
def list_products
@product_names.each_with_index do |list_item, i|
puts "#{i} #{list_item}"
end
end