我的模型是这样的,
class Slot
include Mongoid::Document
after_save :calculate_period
field :slot, type: Array
def calculate_period
if condition
do something
end
self.slot = true
save
end
end
提交按钮后会显示此错误, SlotsController中的SystemStackError #create 堆栈级别太深
也消耗更多时间。如果我从def calculate_period中删除了保存,则值不存储after_save回调。
任何解决方案...... !!!
答案 0 :(得分:4)
您应该将此更改为before_save,这样您可以更改模型的属性,然后它们将照常保存到数据库中。
class Slot
include Mongoid::Document
before_save :calculate_period
def calculate_period
if condition
#do something
end
end
end
答案 1 :(得分:3)
你有无限循环 - save
方法调用calculate_period
调用回调,包括你的calculate_period
回调。我想到的第一个解决方案是添加虚拟属性并在调用回调方法之前检查它:
class Slot
include Mongoid::Document
after_save :calculate_period, unless: :period_calculated # I'm not sure if Mongoid allows this
attr_accessor :period_calculated
def calculate_period
if condition
# do something
end
self.period_calculated = true
save
end
end