2

我想在模型更新之前检测属性是否发生了变化。

我有以下(基于:http ://api.rubyonrails.org/classes/ActiveModel/Dirty.html ):

before_update :changed_attributes

def changed_attributes
    self.path_changed? ? puts('Path was changed') : puts('Path was not changed')
end

但是现在当我尝试编辑 Model.path 属性时,我收到以下错误:

SystemStackError: stack level too deep

有人告诉我,这意味着正在发生无限递归。

在不创建 SystemStackError 的情况下执行此操作的正确方法是什么?

4

1 回答 1

4

问题是 ActiveRecord 已经有一个名为changed_attributes. 最有可能path_changed?调用changed_attributes,但您已经重新定义changed_attributes并且它包含path_changed?. 这会导致无休止的递归并最终导致堆栈级别过深。

尝试将您的方法名称更改为check_changed_attributes

before_update :check_changed_attributes

def check_changed_attributes
  self.path_changed? ? puts 'Path was changed' : puts 'Path was not changed'
end
于 2013-04-01T07:52:18.333 回答