【问题标题】:Rails 2.3.8: Callback that will happen before save and validation (even when there's no validation)Rails 2.3.8:在保存和验证之前发生的回调(即使没有验证)
【发布时间】:2012-02-16 09:36:28
【问题描述】:

我使用 before_validation,在模型验证之前对模型进行一些更新,然后再保存。

显然,当您未经验证保存时不会调用验证回调。

我应该使用什么回调来确保此代码在保存之前运行如果它存在则在验证之前运行?

【问题讨论】:

    标签: ruby-on-rails callback


    【解决方案1】:

    跳过验证听起来像是一种解决方法。如果您不想验证,最好有条件地调用验证。这样它也是可测试的。

    这看起来很老套,但是......

    def save
      do_something
      super
    end
    

    【讨论】:

    • 跳过验证的原因,是因为一些模型与验证一起死锁(一个在另一个被改变之前是无效的,反之亦然)。因此,您无需验证就保存了两个模型,然后才运行验证(全部在事务中)。
    • 顺便说一句,这是否意味着 Rails 不支持在验证保存之前发生的回调?
    • 据我所知,没有。 Rails API 按可用的顺序列出可用的回调:api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
    • 听起来有很多相互依赖的情况,在这种情况下,跳过验证会在某个时候回来咬你。我会重新考虑那个设计。说起来容易做起来难,我知道。
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多