首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个名称错误,不确定在哪里定义我的参数

我有一个名称错误,不确定在哪里定义我的参数
EN

Stack Overflow用户
提问于 2020-05-04 09:06:48
回答 1查看 62关注 0票数 0

我正在做一个吉他浏览CLI项目。我有不同吉他的名称和网址,如下所示:

代码语言:javascript
复制
def self.get_electric
        doc = Nokogiri::HTML(open("https://reverb.com/c/electric-guitars"))

        electrics = []
        counter = 0

        while counter < doc.css("h2:contains('Popular Electric Guitars')+div.overflowing-row__items ul.tiles.tiles--single-row.tiles--grow.tiles--three-wide li.tiles__tile").length
        electric = {
            name: doc.css("h2:contains('Popular Electric Guitars')+div.overflowing-row__items ul.tiles.tiles--single-row.tiles--grow.tiles--three-wide li.tiles__tile")[counter].text,
            url: doc.css("h2:contains('Popular Electric Guitars')+div.overflowing-row__items ul.tiles.tiles--single-row.tiles--grow.tiles--three-wide li.tiles__tile a.marketing-callout__inner")[counter]["href"]
        }
        counter += 1
        electrics << electric
        end
        electrics
        HiStrung::Guitar.mass_create_electrics(electrics)
    end

如果用户输入‘电动’或‘声学’,他们将得到吉他的名称和url:

代码语言:javascript
复制
Enter here: electric

1. Fender Telecaster - https://reverb.com/marketplace/electric-guitars?query=telecaster
2. Gibson Les Paul - https://reverb.com/marketplace?query=les%20paul
3. Fender Stratocaster - https://reverb.com/marketplace/electric-guitars?query=stratocaster
4. Gibson SG - https://reverb.com/marketplace?query=sg
5. Fender Jazzmaster - https://reverb.com/marketplace?query=jazzmaster

现在我希望我的程序所做的是,当用户输入他们想要更多了解的吉他的号码时,它将显示该吉他的价格和描述。价格和描述在另一个url中。

我正在尝试创建一个方法,该方法获取url并获取价格和描述的html:

代码语言:javascript
复制
def self.get_electric_info(electric)
        url = electric.url
        doc = Nokogiri::HTML(url)
    end

但是我得到了这个名字错误:

代码语言:javascript
复制
pry(main)> HiStrung::Scraper.get_electric_info(electric)
NameError: undefined local variable or method `electric' for main:Object
from (pry):1:in `__pry__'

下面是我的初始化类:

代码语言:javascript
复制
class HiStrung::Guitar
attr_accessor :name, :url

@@electrics = []
@@acoustics = []

def self.electrics
    @@electrics
end

def self.acoustics
    @@acoustics
end

def self.mass_create_electrics(electric_hash)
    electric_hash.each do |e_hash|
        electric = HiStrung::Guitar.new(e_hash[:name], e_hash[:url])
        @@electrics << electric
    end
end

def self.mass_create_acoustics(acoustic_hash)
    acoustic_hash.each do |a_hash|
        acoustic = HiStrung::Guitar.new(a_hash[:name], a_hash[:url])
        @@acoustics << acoustic
    end
end

def initialize(name, url)
    @name, @url = name, url
end

结束

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-04 10:13:18

您没有在调用该方法时提供上下文,但是如果您查看您的代码,您会发现您没有定义electric变量。

在调用方法之前,将electric分配给需要其信息的吉他对象。

这样做:

代码语言:javascript
复制
electric = HiStrung::Guitar.new("My name", "My url")
HiStrung::Scraper.get_electric_info(electric)

这应该可以解决问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61583684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档