2013-05-20 3 views
0

조건이 true가되면 테이블의 필드를 업데이트하는 방법을 알아 내려고했습니다.데이터베이스에 저장 한 후 조건이 유효한지 확인한 후 작업 실행 - 레일

내 사이트는 두 개의 어레이를 비교하여 운동이 완료되었는지 확인합니다. completedExercises 배열의 totalExercisesInWorkout 배열과 동일한 workout_id가 있으면 true로 되돌아옵니다. 내가 사실이되면 사용자에게 새로운 workout_id을 할당하려고합니다.

나는이 작업을 수행하는 가장 좋은 방법은 모델의 after_save 콜백이 같은 뭔가 생각 :

문제는, 내가 전화 한 인스턴스 변수가있는 application_controller에 정의되어있다

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 
initialize_vars 메소드는 여기에서 액세스 할 수 없습니다.

다른 인스턴스 변수를 다른 곳에 정의해야합니까? 두 개가 필요합니다.

마지막 연습 문제가 완료되었는지 확인한 다음 사용자에게 조치를 취하는 가장 좋은 방법입니까?

+0

전체 블록이 컨트롤러에 속한 것으로 보입니다. 모델에는'current_user'가 없습니다. –

+0

컨트롤러에서 after_save가 작동하지 않는다고 생각합니다. ApplicationController에 대한 정의되지 않은 메소드'after_save ': Class' – Arel

+0

예, 메소드의 본문을 의미합니다. 어떻게 부를까요? 그것이 진짜 질문입니다. –

답변

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 

위 예제에서 나는 현재 로그인 한 사용자 인 User 클래스를 참조하기 만합니다.

관련 문제