Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ActiveRecord更新头记录_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails ActiveRecord更新头记录

Ruby on rails Rails ActiveRecord更新头记录,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我有一张资源发票和一张资源发票行 当我创建、更新或删除发票行时,父项发票的sum列应该更新 这在rails中是如何实现的?有一个选项可以传递给属于关联。对于您的模型,您可以定义所属的关联,如下所示: class InvoiceLine < ActiveRecord::Base belongs_to :invoice, dependent: :destroy, counter_cache: :sum_column end class InvoiceLine

我有一张资源发票和一张资源发票行

当我创建、更新或删除发票行时,父项发票的sum列应该更新

这在rails中是如何实现的?

有一个选项可以传递给
属于关联。对于您的模型,您可以定义
所属的关联,如下所示:

class InvoiceLine < ActiveRecord::Base
  belongs_to :invoice, dependent: :destroy, counter_cache: :sum_column
end
class InvoiceLine

请注意,您的
发票
表中应该有列名称
sum\u列
(例如上面的例子)

您可以通过回调来实现这一点,比如

class InvoiceLine < ActiveRecord::Base
  after_destroy :calculate_invoice_sum
  after_save :calculate_invoice_sum

  belongs_to :invoice

  def calculate_invoice_sum
    if invoice
      invoice.calculate_invoice_sum
    end
  end
end

class Invoice < ActiveRecord::Base
  has_many :invoice_lines

  def calculate_invoice_sum
    # assuming InvoiceLine has an amount attribute
    total = invoice_lines.sum(&:amount)
    update_attribute(:sum, total)
  end
end
class InvoiceLine
您可能希望在回调之前使用
,而不是在回调之后使用
,但我认为在这种情况下,after更有意义


我猜他想合计每个发票行的金额,我想计数器缓存只会更新发票行记录的计数?我也遇到了同样的问题。它如何知道要汇总的发票行列?如果它只计算子记录,那也很好,也很有用,但我想得到@house9所说的所有弹药的总和