rails回调,在活动记录中执行和存储计算

时间:2014-07-26 11:09:31

标签: ruby-on-rails rails-activerecord

工作有很多工作交付成本,工作交付成本属于工作。我正在尝试在作业模型中编写一个方法,该方法计算作业交付成本的总价格并将其存储在其total_job_delivery_cost列中。

我目前在作业投放成本控制器中使用此方法来显示视图中的总计。但我需要实际存储价值。

  def calculate_delivery_total(array)
    array.inject(0) { |total, item| (total + item.cost_per_unit * item.hour_count) * item.quantity }
  end

所以我的问题更广泛地说,如何使用回调在不同的模型中执行操作。我需要确保它只与相关记录一起工作,而不是所有的工作交付成本。我不确定如何在模型中这样做。

谢谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么这可能会做你想要的:

class DeliveryCost < ActiveRecord::Base
  belongs_to :job

  after_commit do
    job.update_total_cost if job
  end

  def total_cost
    # calculate total cost for DeliveryCost instance here
    # something like:
    cost_per_unit * hour_count * quantity
  end
end

class Job < ActiveRecord::Base
  has_many :delivery_costs

  def update_total_cost
    total_job_delivery_cost = calculate_total_cost
  end

  private
  def calculate_total_cost
    delivery_costs.inject(0) { |total, delivery_cost| total + delivery_cost.total_cost }
  end
end

在对DeliveryCost表进行任何更改时,会触发after_commit

请询问是否有不明确的事情。