jon*_*hue 1 ruby-on-rails before-save stack-level
我有这个简单的模型:
class Post < ApplicationRecord
after_create_commit :process
before_save :re_process, on: :update
has_one :processed, class_name: 'Post::Process'
def process
self.processed.destroy if self.processed
processed = self.build_processed
processed.save!
end
private
def re_process
self.process if self.title_changed?
end
end
Run Code Online (Sandbox Code Playgroud)
Stack level to deep每当我创建一个新的时候我都会收到错误Post.
现在当我删除before_save :re_process, on: :update一切正常.
这条线不应该只在我更新帖子时受到影响吗?
是的,你添加的before_save update工作正常.
问题是,您after_create_commit已经创建了代码保存记录的记录.
def process
# here the Post was already created
self.processed.destroy if self.processed
processed = self.build_processed
processed.save! # And here, you are updating the Post, so it triggers the re_process
end
Run Code Online (Sandbox Code Playgroud)
所以,基本上,当你创建一个帖子时:
保存帖子
调用process回调(after_create_commit)
调用re_process(因为它process在执行时调用方法save!)
process再次打电话(因为它被称为re_process)
等等...
这个循环导致了 Stack level to deep
希望它有所帮助!
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |