我正在开发一个CLI项目,并试图通过使用另一个方法中声明的url变量来打开一个网页。
def self.open_deal_page(input)
index = input.to_i - 1
@deals = PopularDeals::NewDeals.new_deals
@deals.each do |info|
d = info[index]
@product_url = "#{d.url}"
end
@product_url.to_s
puts "They got me!"
end
def self.deal_page(product_url)
#self.open_deal_page(input)
deal = {}
html = Nokogiri::HTML(open(@product_url))
doc = Nokogiri::HTML(html)
deal[:name] = doc.css(".dealTitle h1").text.strip
deal[:discription] = doc.css(".textDescription").text.strip
deal[:purchase] = doc.css("div a.button").attribute("href")
deal
#binding.pry
end
但是我收到了这个错误。
`open': no implicit conversion of nil into String (TypeError)
任何可能的解决方案?非常感谢你。
答案 0 :(得分:1)
尝试在@product_url
方法中返回open_deal_page
,因为现在您正在返回puts "They got me!"
,并且还要注意您的product_url
是在{{1}内创建的阻止,因此,它将无法访问,尝试创建它之前作为空each
,然后您可以返回它。
string
在您的def open_deal_page(input)
...
# Create the variable
product_url = ''
# Assign it the value
deals.each do |info|
product_url = "#{info[index].url}"
end
# And return it
product_url
end
方法中,告诉Nokogiri打开您作为参数传递的product_url。
deal_page