/ / RoR Adicionando objeto a um array já em def initialize? - ruby-on-rails, matrizes, rubi

RoR Adicionando objeto a um array já em def initialize? - ruby-on-rails, matrizes, rubi

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 № 1

Para 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