【问题标题】:How to catch when project is closed项目关闭时如何捕捉
【发布时间】:2018-02-08 11:06:28
【问题描述】:

Redmine的model Project有方法

  def close
    self_and_descendants.status(STATUS_ACTIVE).update_all :status => STATUS_CLOSED
  end

在此方法中使用update_all 更新意味着当项目关闭时,不会调用回调after_save

当项目关闭时,您如何(通过模型)捕获?

【问题讨论】:

    标签: ruby-on-rails ruby callback redmine after-save


    【解决方案1】:

    Rails 5 允许使用回调和验证更新记录:

    self_and_descendants.status(STATUS_ACTIVE).update(status: STATUS_CLOSED)
    

    对于 Rails 4 及以下版本,您可以通过批量更新记录来触发回调:

    self_and_descendants.status(STATUS_ACTIVE).find_each { |record| record.update_attributes(status: STATUS_CLOSED) }
    

    【讨论】:

    • 是的,但我不想改变原来的方法close
    • @Willmore 请澄清:您注意到您的代码有问题,但您不想在代码中解决该问题? update_all 的文档清楚地表明它不会调用验证或回调。如果你依赖回调,那么你必须使用另一种方法。
    • @spickermann 在app/models/project.rb中定义的是Redmine的model Project。
    【解决方案2】:

    如果您不想更改原始方法,您可以添加一个插件来为您修补关闭功能(使用 Rustik 上面提出的代码:https://stackoverflow.com/a/48684242/5961910)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-21
      • 2014-03-19
      • 2014-09-07
      • 2021-11-05
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多