如何在项目结束时捕获

时间:2018-02-08 11:06:29

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

Redmine的模型Project有一个方法

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

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

如何在项目结束时(通过模型)捕获?

2 个答案:

答案 0 :(得分:0)

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) }

答案 1 :(得分:0)

如果您不想更改原始方法,可以添加一个插件,为您修补关闭功能(使用Rustik上面提出的代码:http://sqlfiddle.com/#!18/b9980/3/0)。