这是我第一次使用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数组。之后还有什么其他方法可以在def initialize(name, surname, email, wallet)
中使用此方法。像this.add_to_array
我想拥有包含所有客户端的数组,但我不希望每次创建新客户端时都使用方法add_to_array。它应该是自动的。
答案 0 :(得分:1)
要将客户端实例添加到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>]
答案 1 :(得分:0)
你可以试试这个
class Client < Person
@@clientList = []
def initialize(name, surname, email, wallet)
super(name, surname, email)
@wallet = wallet
@@clientList << self
end
attr_reader :wallet, :clientList
def to_s
super + ", #{@wallet}"
end
end
但说实话,我建议您重新构建此代码。如果你使用的是rails,那么通过使用具有许多关联的活动记录模型可以更好地处理它。
class ClientList < ActiveRecord::Base
has_many :clients
end
class Person < ActiveRecord::Base
end
class Client < Person
belongs_to :client_list
end