0

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

我的网站通过比较两个数组来检查锻炼是否已完成。当 completedExercises 数组与 totalExercisesInWorkout 数组具有相同的锻炼 ID 时,它返回为真。当我得到 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_controllerinitialize_vars方法中定义的,这里无法访问。

我应该在其他地方定义这些实例变量吗?我需要它们是几个地方

这是检查最后一个练习是否已完成然后对用户执行操作的最佳方法吗?

4

1 回答 1

0

所以这里的问题是我在控制器中定义了真正属于模型的东西。如果要访问当前用户,则需要在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 类,即当前登录的用户。

于 2013-07-10T15:57:01.037 回答