如何修改其他模型中的记录

时间:2016-05-09 20:12:38

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller model

我是一名铁路开关,我正在编写一个简单的应用来训练语言和其他东西。

在我的应用中,我生成了三个不同的支架,一个用于,一个用于众议院活动,另一个用于将它们链接在一起,称为分配。这是一个多对多的依赖情况。

所以我试图计算一个人花在分配给他们的所有家务活动上的总时间,并将其存储在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

1 个答案:

答案 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

我建议不要将此总和存储在数据库中,因为这样你必须确保其一致性(例如,每次创建,编辑或删除作业时,你必须确保使用新的总和更新相关的人员)。您可能会认为每次重新计算总和会降低您的应用程序速度,并且可能在将来某个时候有数千条记录,但除非直到出现实际性能问题,否则无需对其进行优化就产生了。