私は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)
可能な解決策はありますか?事前にありがとうございます。
「x」ではなく「self.x」として宣言しているのは、インスタンスメソッドではなくクラスメソッドになっているので、奇妙です。このようなコンポーネントを設計するときは、通常、これらをインスタンスメソッドにして、 '@ deals'のようなインスタンス変数を問題のインスタンスに対してローカルにします。これらが単なるスタンドアローンのメソッドであれば、 'self.'プレフィックスの理由はありませんが、' @ 'スタイルのインスタンス変数の使用も避けるべきです。代わりに、必要な変数をメソッドの引数として渡します。あなたはすでにこれをやっていますが、変数を間違って参照しています。 – tadman
@tadmanご意見ありがとうございました。 –