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