Esta é a minha primeira tentativa com Ruby on Rails, então peço desculpas se a pergunta é óbvia, mas infelizmente não consigo encontrar a resposta em nenhum lugar.
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
Eu gostaria de criar o método, que me permite adicionar instâncias de classe de cliente para o array clientList. O que mais há depois alguma opção para usar este método já em def initialize(name, surname, email, wallet)
. Algo como this.add_to_array
Eu gostaria de ter matriz com todos os clientes dentro, mas eu não quero usar o método add_to_array toda vez que eu criar novo cliente. Ele deve ser automático.
Respostas:
1 para resposta № 1Para adicionar instâncias do cliente a clientList
você tem que mudar clientList
ser pelo menos variável de instância de classe, adicione o acessador para ele e uma chamada add_to_array
(Eu renomei para add_to_clients_list
) para inicializar o método, para que o clientList
atualiza toda vez que o Client
instância é criada:
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
Agora:
# 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>]
0 para resposta № 2
Você poderia tentar isso
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
Mas, para ser sincera, eu sugiro que vocêreestruturar este código. Se você estiver usando o Rails, isso é algo que seria muito melhor manipulado usando modelos de registro ativos com muitas associações.
class ClientList < ActiveRecord::Base
has_many :clients
end
class Person < ActiveRecord::Base
end
class Client < Person
belongs_to :client_list
end