在保存到数据库后检查条件是否有效,然后执行操作-Rails



我一直在试图弄清楚如何在一个条件变为真时更新表中的字段。

我的站点通过比较两个数组来检查锻炼是否已经完成。当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类,这是当前登录的用户。

相关内容

最新更新