1

我正在建立一个目标日历,其中有以下 has_many 关系。

CalEntry 

  has_many :goals

Goals 
  has_many :completed_goals
  has_many :planned_goals 

CompletedGoals
  has_many :completed_times

PlannedGoals
  has_many :planned_times

如您所见,每个日历日都包含许多目标,这些目标又被分解为已完成和计划的目标。这些中的每一个都有与花费在该活动上的时间块相对应的时间。当我在控制器中使用编辑操作时,会出现我的问题。如果正在编辑的 CalEntry 对象下的特定目标没有任何记录的时间,我希望能够为正在编辑的 CalEntry 构建几个时间块。这就是我所拥有的:

def edit
  @cal_entry = CalEntry.find(params[:id])
  @goal_id = params[:goal_ref]
  goal = @cal_entry.goal.find(@goal_id)
  completed_goal = goal.completed_goals.first
  completed_goal.completed_times.build
end

这似乎不起作用,因为@cal_entry 对象似乎不包含已完成时间的新建实例。当我用 .build 替换 @cal_entry 对象上使用的 find 方法时,它会构建整个嵌套对象树的全新实例,这不是我想要的。我只希望 completed_times 构建一些额外的实例。关于如何在控制器中将新实例构建为深度嵌套的对象,我一定缺少一些简单的东西。

谢谢你的帮助!

4

0 回答 0