我有一个属于大学模式的教育模式,大学有很多教育。我有一个评级列,它是教育表中的整数,但在大学表中这是一个小数。我想做的是每次创建或更新教育时,我希望更新特定大学的平均值并将其存储在大学表中。我的解决方案不起作用,所以有人可以指出我正确的方向吗?这是大学模特中的扫管笏。
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
答案 0 :(得分:0)
的问题
undefined method `disabilityDeptRating' for # ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_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}}