gpt4 book ai didi

ruby-on-rails - 在 model.save 或 model.save 中捕获数据库异常!方法?

转载 作者:行者123 更新时间:2023-12-01 02:55:00 25 4
gpt4 key购买 nike

我有两个模型,当保存某些类型的数据时,它会导致数据库抛出异常。我可以在保存之前转换数据以避免异常,但转换很昂贵,异常很少发生。

所以,我想知道是否可以创建 model.save 方法的覆盖,并捕获从数据库抛出的异常?那行得通吗?

例如:

def save
begin
super
rescue Exception => e
if e.is_a? ActiveRecord::StatementInvalid
# Do some processing and resave
end
end
end

我想这样做的原因是因为我已经不得不在有这个问题的两个模型之间重复大量处理代码,还因为我想避免在别处调用 save 的潜在问题稍后,但不添加异常处理代码。

比如写一些测试代码,直接调用save时,错误数据抛出异常。

所以,有几个问题:
  • 甚至可以从保存或保存中捕获异常!方法?
  • 修复数据后,如何再次尝试保存?我要再次调用 super() 吗?
  • 有没有更好的方法来处理这个问题?

  • 非常感谢。

    最佳答案

    我不会覆盖保存的默认行为,我会简单地创建我自己的方法。

    def save_with_exception_handler
    begin
    self.save!
    rescue Exception => e
    if e.is_a? ActiveRecord::StatementInvalid
    # Do some processing and resave
    end
    end
    end

    显然,给它一个在你的上下文中有意义的更好的名字。然后只需调用您当前调用 save 的位置:
    model_instance.save_with_exception_handler

    关于ruby-on-rails - 在 model.save 或 model.save 中捕获数据库异常!方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3323459/

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