gpt4 book ai didi

ruby-on-rails - 需要从验证写入数据库

转载 作者:太空宇宙 更新时间:2023-11-03 18:26:22 25 4
gpt4 key购买 nike

在我的模型中,我有向外部服务发送请求的自定义验证方法。根据响应,我将错误添加到 errors 数组(如果有)。

如果有错误,我还需要新建ErrorLog模型的记录,代表错误日志。问题是,当验证失败时,它会在数据库上执行 ROLLBACK,并且我所有新的 ErrorLog 记录都将丢失。实现它的最佳方式是什么?

我还应该说 after_rollback 由于某种原因没有被调用。

最佳答案

after_rollback 仅在事务期间保存或销毁的对象上调用。您是在主类还是在 ErrorLog 类上设置 after_rollback 回调?

事实上,在您的 ErrorLog 类上使用 after_rollback 回调似乎是最简单的方法。唯一会丢失 ErrorLog 实例的情况是事务被回滚,这样应该可以工作:

class MyClass < ActiveRecord::Base
before_save :check_external

def check_external
unless external_says_i_am_okay?
ErrorLog.create!(:message => 'oops')
end
end
end

class ErrorLog < ActiveRecord::Base
after_rollback :save_anyway

def save_anyway
self.save!
end
end

当然,说了这么多您可能想要考虑获取外部服务来验证您的模型的性能。例如,如果您在 Web 请求范围内创建对象,它可能不够快。您还需要确保 ErrorLog#save 不会失败,因为届时您将超出事务范围。

关于ruby-on-rails - 需要从验证写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com