Ruby on Rails – 创建新条目时,使用回调将两个对象在单独的表中相乘

我有3个表,目标,活动和Goal_Activities。 目标有一个xp的设定值,而Activity接受来自用户的输入。 使用Activity中的on_create方法,我想将用户输入与目标xp相乘并将其存储在目标活动表中,这样我就可以保留每个更新的记录,并最终将它们全部添加到一起以创建总目标xp in目标表。

我在SO, 这里和这里找到了几个关于类似主题的问题,但我发现很难理解模型文件之间的关联以及如何访问不同模型中的某些方法。

我还阅读了关于回调的文档,我认为这是我需要设置的,但如果有更好的方法,请告诉我。

这是我目前的模特协会。

goal.rb

class Goal < ActiveRecord::Base has_many :goal_activities has_many :activities, through: :goal_activities end 

goal_activity.rb

 class GoalActivity < ActiveRecord::Base belongs_to :goal belongs_to :activity end 

activity.rb

 class Activity < ActiveRecord::Base has_many :goal_activities belongs_to :goal, through: :goal_activities end 

以下是表中的一组示例值。

目标

goal_id:1,xp:500,total_goal_xp:默认值为0

活动

activity_id:1,数量:3,goal_id:1

Goal_activities

goal_activity_id:1,goal_id:1,activity_id:1,total_xp:1500

一旦创建了活动,total_xp就会被添加到目标表中的total_goal_xp中。

任何意见,将不胜感激。 如果您有任何疑问,请告诉我。

您可以在activity.rb使用after_create回调

 after_create :set_total_xp private def set_total_xp goal_activity = self.goal_activities.where(goal_id: goal_id).first_or_initialize goal_activity.update_attribute(:total_xp, (quantity*goal.xp)) end