Ruby on rails:计算并存储另一个表中的数据的平均值

时间:2014-04-12 21:21:44

标签: ruby-on-rails

我有一个属于大学模式的教育模式,大学有很多教育。我有一个评级列,它是教育表中的整数,但在大学表中这是一个小数。我想做的是每次创建或更新教育时,我希望更新特定大学的平均值并将其存储在大学表中。我的解决方案不起作用,所以有人可以指出我正确的方向吗?这是大学模特中的扫管笏。

更新平均评分的方法。每次添加或更新教育记录时都会调用此方法

def updateDisabilityDeptRating
  @value = 0.00
  self.educations.disabilityDeptRating.each do |rating|
    @value = @value + rating.value
  end

  @total = self..educations.disabilityDeptRating.size
  update_attributes(disabilityDeptRating: @value.to_f / @total.to_f)
end

教育模式:

after_create :updateUniversityRatings
after_update :updateUniversityRatings

# method to run the update method in the university model 
def updateUniversityRatings
  university.updateDisabilityDeptRating
end

1 个答案:

答案 0 :(得分:0)

的问题
undefined method `disabilityDeptRating' for # ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_Collect‌​ionProxy_Education:0x000000067cb360>

可以通过此更改修复:

self.educations.each do |education|
  @value = @value + education.disabilityDeptRating
end

rails / ruby​​允许我们根据需要稍微清理一下

value = self.educations.sum(&:disabilityDeptRating)

其他一些指示:

    updateDisabilityDeptRating方法@value@total中的
  • 仅用于该方法,因此您可以删除将@转换为实例/成员变量的after_create在这种情况下不需要。

  • 您可以使用after_update

  • 而不是after_save和{{1}}