Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 在子更新时更新父模型_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 在子更新时更新父模型

Ruby on rails 在子更新时更新父模型,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有两个脚手架生成的模型:书和书包。书包里有很多书,一本书属于书包。每本书都有一个重量,每个书包都有一个平均重量,用来储存所有书的平均重量。保持平均体重最新的最佳方法是什么 在书包上使用“保存前”过滤器不起作用,因为它不会在每次更新它所包含的书籍时调用,而且我不想在每次更新书籍时更新平均重量,只在书籍重量发生变化时才更新。快速解决方案可能是这样的: class Book def before_save self.bookbag.update_avg if self.weight_ch

我有两个脚手架生成的模型:书和书包。书包里有很多书,一本书属于书包。每本书都有一个重量,每个书包都有一个平均重量,用来储存所有书的平均重量。保持平均体重最新的最佳方法是什么


在书包上使用“保存前”过滤器不起作用,因为它不会在每次更新它所包含的书籍时调用,而且我不想在每次更新书籍时更新平均重量,只在书籍重量发生变化时才更新。快速解决方案可能是这样的:

class Book
  def before_save
    self.bookbag.update_avg if self.weight_changed?
  end
end

一个快速的解决方案可能是这样的:

class Book
  def before_save
    self.bookbag.update_avg if self.weight_changed?
  end
end

如果您能够根据需要重新计算平均值,那么还有另一种解决方案

class Bookbag < ActiveRecord::Base
  has_many :books

  def weight_average
    self.books.average(:weight)
  end
end
类书包

在这种情况下,您不需要任何回调,并且可以利用数据库的计算能力。

如果您能够根据需要重新计算平均值,那么还有另一种解决方案

class Bookbag < ActiveRecord::Base
  has_many :books

  def weight_average
    self.books.average(:weight)
  end
end
类书包
在这种情况下,您不需要任何回调,并且可以利用数据库的计算能力