这是我第一次尝试使用ruby on rails,如果问题很明显,我很抱歉,但不幸的是,我在任何地方都找不到答案。
class Client < Person
clientList = []
def initialize(name, surname, email, wallet)
super(name, surname, email)
@wallet = wallet
end
attr_reader :wallet, :clientList
def to_s
super + ", #{@wallet}"
end
def add_to_array
clientList + this.object
#i know its not correct
end
end
我想创建方法,它允许我向clientlist数组添加client类的实例。以后还有什么选项可以在
def initialize(name, surname, email, wallet)
中使用这个方法。类似于this.add_to_array
我希望数组中包含所有客户端,但我不希望每次创建新客户端时都使用add_to_array方法。它应该是自动的。
最佳答案
要将客户机实例添加到clientList
中,必须将clientList
更改为至少类实例变量,为其添加访问器并调用add_to_array
(我将其重命名为add_to_clients_list
)来初始化方法,以便每次创建clientList
实例时,Client
都会更新:
class Client < Person
@clientList = []
class << self
attr_accessor :clientList # add an accessor, so you can use Client.clientList
end
def initialize(name, surname, email, wallet)
super(name, surname, email)
@wallet = wallet
add_to_array # call a method, that adds this created instance to array
end
attr_reader :wallet, :clientList
def to_s
super + ", #{@wallet}"
end
def add_to_array
self.class.clientList << self
end
end
现在:
# create instance of Client
Client.new(1,2,3,4)
#<Client:0x007f873db25a68 @wallet=4>
# It is automatically added to `clientList`
Client.clientList
#=> [#<Client:0x007f873db25a68 @wallet=4>]