我一直在试图弄清楚如何在一个条件变为真时更新表中的字段。
我的站点通过比较两个数组来检查锻炼是否已经完成。当completedExercises数组具有与totalExercisesInWorkout数组相同的workout_id时,它返回为true。当我得到true时,我想给用户分配一个新的workout_id
我认为最好的方法是在模型中使用after_save
回调,如下所示:
after_save :is_workout_complete?
protected
def is_workout_complete?
if @totalExercisesInWorkout.included_in?(@completedExercises) == true
current_user.workout_id = @workout.next_workout_id
end
end
问题是,我调用的实例变量是在application_controller
中的initialize_vars
方法中定义的,这在这里是不可访问的。
我应该在其他地方定义这些实例变量吗?我有几个地方需要它们
这是检查最后一个练习是否已完成,然后对用户采取操作的最佳方法吗?
这里的问题是我在控制器中定义了真正属于模型的东西。如果您想访问当前用户,您需要在User
模型中编写您的方法。例如:
def add_initial_program
prog_id = Program.for_user(self).first.id
self.user_programs.build( :cycle_order => 1, :group_order => 1, :workout_order => 1, :program_id => prog_id)
end
在上面的例子中,我只是使用self来引用User类,这是当前登录的用户。