在调用attribute_foo =(bar)时,调用自定义代码,以更改条形

时间:2012-04-12 09:26:01

标签: ruby-on-rails-3 attributes decorator

出于某种原因,我的生产机器上出现了一个简单的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位版本。

1 个答案:

答案 0 :(得分:0)

解决方案很简单:只需使用write_attribute

Spree :: Variant.class_eval do def price =(value)write_attribute(:price,bar(value))end 端