是否存在回调无法运行的情况?
大约4-5天前,回调已经出现了#34;在某些型号上随机停止运行。问题是它是间歇性的。
最简单的是:
after_create :generate_tokens
def generate_tokens
self.update(ref: Devise.friendly_token[0,10])
end
正在创建模型,其中ref为nil
。整个餐桌上似乎随机都是胡椒。
当我重新部署对乘客进行重置时,它会重新开始工作。很明显,代码中的某些内容"中断"并且需要重置,但不会显示任何错误或系统投诉。
由于
答案 0 :(得分:1)
我会将after_create
回调更改为before_validate
回调。然后ref
在与新对象相同的事务中写入数据库。并且 - 作为奖励 - 您可以添加验证模型中是否存在ref
值:
before_validation :generate_tokens, on: [:create]
validates! :ref, presence: true, on: :create
private
def generate_tokens
self.ref = Devise.friendly_token[0,10]
end
答案 1 :(得分:0)
ActiveRecord #update返回一个布尔值,告知更新是否已完成。由于未使用返回或捕获代码可能无法通过(对于实例的验证错误)而没有看到错误。
由于此处的回调是after_create,因此您的对象将被保留,但generate_tokens可能会下降。我建议你将代码切换到
def generate_tokens
self.update!(ref: Devise.friendly_token[0,10])
end
它会引发异常,因此可以帮助您发现问题。