2012-03-13 6 views
0

イニシャライザで変数を正しく設定する方法が混乱しています。これらをインスタンスではなくクラスレベルの変数にします。config(yaml)でクラスを初期化し、1つのインスタンスにする変数を設定する

また、別のオブジェクトのインスタンスを1つ作成する必要があります(接続オブジェクトが既に作成されています。そのため、接続プールが組み込まれているため、1つの参照が必要です)。

yml = YAML.load_file("#{Rails.root}/config/my_class.yml") 

MYMODULE::MyClass.init(yml) 

そして、ここでは私のmy_class.rbある/initializers/my_class.rb

マイ初期化子:

module MYMODULE 
    class MyClass 
    def self.init(yml) 
     @post_url = yml["defaults"]["post_url"] 
    end 

    def self.post_url 
     @post_url 
    end 

    # this should be a single instance 
    def connection_pool 
     # ??? 
    end 
    end 
end 
  1. これらのクラスレベルの変数は、どのように私は両方のクラスからそれらにアクセスすることができますメソッドとインスタンスメソッド?

私は動作が荒くなりました。私は、post_urlをどのクラスメソッドとインスタンスメソッドの内部から参照するのか混乱しています。

私は正しいが不明、次の方法を見てきました:

self.class.post_url 
MyClass.post_url 
@post_url 
post_url 
self.post_url 

答えて

1

self.class.post_urlまたはMyClass.post_urlが動作します。違いは、サブクラスでどのように動作するかです(前者の場合、サブクラスはこの変数のバージョンを自動的に使用しますが、後者では変数をMyClassで共有します)。

インスタンスからクラスインスタンス変数に直接アクセスする方法はありません。それらを返す(または設定する)クラスメソッドを呼び出す必要があります。参照:cattr_accessor

これは本当にシングルトンの場合、クラスの一部を構成し、その情報を(単一の)インスタンスで参照するというのは少し奇妙なようです。このようなことをインスタンスに設定するだけでは意味がありませんか?または、モジュールをシングルトンとして使用し、インスタンスをまったく作成しないでください。

+0

いくつかのコードスニペットで説明できますが、ごめんなさい。 – Blankman