0

假设在我的 rails 应用程序中,我有一个模型 Entry,它有一个嵌套模型Measures,这样每个条目都有_many_measures(和measures belongs_to 条目)。

每项措施都有其自身的动机。Entry 是否有可能有一个整数也称为激励,其值等于所有度量值的总和?你如何做到这一点?

对我来说,这似乎变成了一个两部分的问题:如何在提交时根据另一个字段值定义模型字段?那么..如何在提交时根据其嵌套模型值定义一个值?

4

1 回答 1

1

尝试after_update在嵌套属性的模型中使用回调来更新其父级:

class Measure < ActiveRecord::Base
  after_update :calculate_measure_sum

  ...
  private

  def calculate_measure_sum
    # calculate sum
    self.entry.save
  end
end

您可能还需要在after_create回调上使用相同的方法。

编辑:

在阅读了touch另一个问题之后,我想更新我的方法:

class Entry < ActiveRecord::Base
  has_many :measures
  after_touch :calculate_measure_sum

  ...
  private

  def calculate_measure_sum
    # calculate sum
    self.entry.save
  end
end

class Measure < ActiveRecord::Base
  belongs_to :entry, touch: true
  ...
end

这里发生的情况是,每次创建或编辑 Measure 时,它​​都会通过调用其touch 方法通知其 Entry 已更新。在条目中,我们可以使用回调after_touch来重新计算度量的总和。请注意,after_touch在创建、删除和修改度量时调用 -callback。

与我之前的方法相比,这种方法将责任放在了入口对象上,从设计的角度来看这是有利的。

于 2012-11-28T01:51:59.520 回答