出于某种原因,我的生产机器上出现了一个简单的piece of decorator-code失败,但在开发时运行良好[1]。
我把它愚蠢了,发现以下是最简单的失败部分:
Spree::Variant.class_eval do
def price=(value)
self.price = normalize_number(value)
end
end
SystemStackError (stack level too deep):
调试告诉我,实际上,函数一直被调用。 self.price =调用price =。
通常的Rails / Ruby模式是什么解决这个问题?我想要的是:
调用attribute_foo=(bar)
时,将其委托给我的自定义代码,在那里我可以通过一小段自定义代码运行传递的bar
。然后将更改后的bar
分配给attribute_foo。
[1]:
唯一的区别是Ruby补丁版本以及生产机器具有64位版本的事实,而开发版本为ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
的32位版本。
答案 0 :(得分:0)
解决方案很简单:只需使用write_attribute
。
Spree :: Variant.class_eval do def price =(value)write_attribute(:price,bar(value))end 端