2016-11-03 5 views
2

これは、Ruby on Railsにと私の最初の試みですので、質問が明白である場合、私は謝るが、残念ながら、私はどこにでも答えを見つけることができません。RoRすでにdefで初期化されている配列にオブジェクトを追加していますか?

クライアントクラスのインスタンスをclientList配列に追加できるメソッドを作成したいと思います。このメソッドを使用するためのオプションは、後でdef initialize(name, surname, email, wallet)に追加されます。何かのようにthis.add_to_array

私はすべてのクライアントが内部に配列したいと思いますが、新しいクライアントを作成するたびにメソッドadd_to_arrayを使いたくありません。それは自動でなければなりません。

+0

[クラスとインスタンス変数のルビー](http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby)を読むことをお勧めします。 /) –

+0

私が見Зелёный@ので、すべてのclientListの最初は右、そのクラスvaribleだけではなく、1つのオブジェクトとして、@@ clientListすべきですか? –

答えて

1

方法を初期化するために(私はadd_to_clients_listに名前を変更したい)あなたはそれとコールadd_to_arrayのためのアクセサを追加し、変数少なくともクラスのインスタンスであることをclientListを変更する必要がclientListにクライアントのインスタンスを追加するには、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>] 
+0

ありがとう! RubyでJavaの 'this'のようなものを使う方法を説明している記事はどこにも見つかりませんでした。私は確かに '自己'についてもっと詳しく読むだろう。 –

+0

@DanZawadzki yea、 'self'はRubyの超スーパースーパーコンセプトです。それを理解すればRubyのほとんどを理解できます:) Btw、それがうまくいくなら、あなたは答えを受け入れることができます(回答スコアの近くにチェックマークを表示) –

+0

@AndreyDinenko Ready!私は本当にあなたが私を助けるためにあなたの時間を費やしたかったことに本当に感謝しています!どうもありがとう! –

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 

を試みることができる。しかし、私はこのコードを再構築することを示唆している正直に言うと。もしあなたがレールを使用しているなら、これは、多くの関連があるアクティブなレコードモデルを使用することによってはるかに良く処理されるでしょう。

class ClientList < ActiveRecord::Base 
    has_many :clients 
end 

class Person < ActiveRecord::Base 
end 

class Client < Person 
    belongs_to :client_list 
end 
+0

ありがとう、またはあなたの助け!しかし、私はクライアントクラスのオブジェクトを作成するたびに、新しいclientListを持つように見えるか、間違っていますか? –

+0

このそれOPが望んでいないものを - '私は内部のすべてのクライアントを持つ配列を持っていると思いますが、私は新しいクライアントを作成する方法のadd_to_array毎回を使用する必要はありません。それは自動でなければなりません。」 –

+0

Andreyどこから来たの?そうです、私は更新しました。 –

関連する問題