gpt4 book ai didi

ruby-on-rails - 我如何在 rails 中销毁 'validate'

转载 作者:数据小太阳 更新时间:2023-10-29 06:19:30 24 4
gpt4 key购买 nike

在销毁 restful 资源时,我想在允许销毁操作继续之前保证一些事情?基本上,如果我注意到这样做会使数据库处于无效状态,我希望能够停止销毁操作?销毁操作没有验证回调,那么如何“验证”销毁操作是否应该被接受?

最佳答案

您可以引发异常,然后捕获该异常。 Rails 将删除包装在一个事务中,这有助于解决问题。

例如:

class Booking < ActiveRecord::Base
has_many :booking_payments
....
def destroy
raise "Cannot delete booking with payments" unless booking_payments.count == 0
# ... ok, go ahead and destroy
super
end
end

或者,您可以使用 before_destroy 回调。此回调通常用于销毁依赖记录,但您可以抛出异常或添加错误。

def before_destroy
return true if booking_payments.count == 0
errors.add :base, "Cannot delete booking with payments"
# or errors.add_to_base in Rails 2
false
# Rails 5
throw(:abort)
end

myBooking.destroy 现在将返回 false,myBooking.errors 将在返回时填充。

关于ruby-on-rails - 我如何在 rails 中销毁 'validate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/123078/

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