我正在建立一个目标日历,其中有以下 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 构建一些额外的实例。关于如何在控制器中将新实例构建为深度嵌套的对象,我一定缺少一些简单的东西。
谢谢你的帮助!
恩