0
ActiveSupport :: Configurableを使用する設定オブジェクトを複製/複製する方法を理解する上で問題があります。私はActiveSupport :: Configurableモジュールを使って簡単な設定オブジェクトを作成しています。いくつかの自動化されたテストでは、現在の設定を脇に置き、別の値を持つ新しい設定オブジェクトを作成したいと思います。ActiveSupport ::設定可能な設定オブジェクトは完全にクローン化されません
module App
class Config
include ActiveSupport::Configurable
def self.remember_config
@previous_config = @config
@config = @config.clone
end
end
end
私はそれを使うと不具合が発生します。私は、remember_config
というメソッドを持っています。
App.config.foo = 1
App.config.foo # Returns 1
App.previous_config # Returns nil
App.remember_config
App.config.foo # Still returns 1
App.previous_config.foo # eturns 1
App.config.foo = 2
App.config.foo # Returns 2
App.config.previous_config.foo # Also returns 2, but I'd like it to return 1!
なぜ、最後の行が1ではなく2を返しますか? @previous_config
とconfig
のオブジェクトには、それぞれ異なるobject_idsがあります。多分それはクローンの問題ではないでしょう。おそらく、ActiveSupport :: Configurableの魔法の仕組みに問題があるかもしれません。
私はdupを試しても動作しませんでした。また、deep_dupメソッドが利用可能で、それもうまくいきませんでした。 – CodeSmith
上記の設定の呼び出しパラメータを私に送信できますか?何も問題がなければ、ファイルやデータベースに書き込むことができます:D –
私は 'ActiveSupport :: Configurable'を削除し、代わりに正規のインスタンス変数を使用しました。 'ActiveSupport :: Configurable'はクローニングに問題があるようです。 – CodeSmith