我是一名铁路开关,我正在编写一个简单的应用来训练语言和其他东西。
在我的应用中,我生成了三个不同的支架,一个用于人,一个用于众议院活动,另一个用于将它们链接在一起,称为分配。这是一个多对多的依赖情况。
所以我试图计算一个人花在分配给他们的所有家务活动上的总时间,并将其存储在Person中,名为" time_allocated"。因此,如果我将两个活动分配给某人,则会返回这些活动的持续时间总和。
搜索后我发现创建一个包含三个依赖项的属性并不好,但我不知道如何以其他方式执行此操作。
这些是我试图做的模型和事情:
人物模型
<input name="audio_file" id="audio_file" type="file" style="position: fixed; top: 2vh;" multiple>
众议院活动模型
class Person < ActiveRecord::Base
has_many :assignments, dependent: :destroy
has_many :house_activities, through: :assignments
extend FriendlyId
friendly_id :name, use: :slugged
end
作业模式
class HouseActivity < ActiveRecord::Base
has_many :assignments, dependent: :destroy
has_many :people, through: :assignments
extend FriendlyId
friendly_id :name, use: :slugged
end
答案 0 :(得分:2)
如果我理解正确,您可以尝试获取所有人duration
house_activities
的总和。您可以使用Rails&#39;直接从数据库中获取此信息。 ActiveRecord::Calculations#sum
方法:
person = Person.find(123)
puts person.house_activities.sum(:duration)
# => 500
当然,您也可以为此创建一个辅助方法:
class Person < ActiveRecord::Base
# ...
def total_activities_duration
house_activities.sum(:duration)
end
end
person = Person.find(123)
puts person.total_activities_duration
# => 500
我建议不要将此总和存储在数据库中,因为这样你必须确保其一致性(例如,每次创建,编辑或删除作业时,你必须确保使用新的总和更新相关的人员)。您可能会认为每次重新计算总和会降低您的应用程序速度,并且可能在将来某个时候有数千条记录,但除非直到出现实际性能问题,否则无需对其进行优化就产生了。