2012-04-12 1 views
0

何らかの理由で、単純なpiece of decorator-codeが本番マシンでは失敗しますが、開発では正常に動作します[1]。 attribute_foo =(bar)の呼び出しで、カスタムコードを呼び出してバーを変更します

は、私はそれをダウン易しく書き直され、次は、最も単純な失敗作品であることがわかった:確かに、関数が呼び出され続ける、ということを私に示して

Spree::Variant.class_eval do 
    def price=(value) 
    self.price = normalize_number(value) 
    end 
end 

SystemStackError (stack level too deep):

デバッグに失敗します。 self.price = price price =を呼び出します。

これに対処するための通常のRails/Rubyパターンは何ですか?私が欲しいのは

が呼び出されたときにカスタムコードにデリゲートして、カスタムコードの小さな部分を渡したbarを実行できます。次に、変更されたbarをattribute_fooに割り当てます。

[1]: 唯一の違いは、Rubyパッチのバージョンと、本番マシンが64ビットバージョンであることです。これは、dev:ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]の32ビットバージョンとは異なります。

答えて

0

慰めは簡単でした:ただwrite_attributeを使用してください。

スプリー:: Variant.class_evalが DEF価格=(値)を行う write_attribute(:価格、バー(値)) 終了 エンド

関連する問題