2013-04-24 2 views
0

새 프로젝트를 진행 중입니다. 백엔드에는 has_many "Courses"와 has_many "Steps"가있는 사용자가 있습니다.JS 이벤트가 상태 시스템 (레일)에서 백엔드 상태 변경을 트리거합니까?

자바 스크립트가 사용자의 답변을 확인하기를 원합니다. 예를 들어 사용자가 "6"을 입력했다고 가정 해 봅시다. 정답입니다. 나는 체크 할 함수가 이와 같이 보일 것이라고 생각한다.

function match_answer(course, answer){ 
} 

JS 이벤트가 사실이라면 저는 백엔드에서 state_machine을 변경하고 싶습니다. 사용자가 다시 로그인 할 때 나는이 과정에서 해당 위치를 이동하는 그들처럼 때문에 나는 자바 스크립트 이벤트가 상태 머신의 상태를 변경하려는 이유

class Step < ActiveRecord::Base 
... 

    state_machine initial: :pending do 
    state :pending, value: 0 
    state :finished, value: 1 

    event :finish do 
     transition :pending => :finished 
    end 

    event :restart do 
     transition :finished => :pending 
    end 
    end 
end 

그 이유는 다음과 같이 state_machine입니다.

1) 자바 스크립트 이벤트로 state_machine의 상태를 변경하려면 어떻게해야합니까? 좀 더 구체적으로 말하면, match_answer 함수가 true로 증명되면 상태를 보류 중 : 완료로 변경하려면 어떻게해야합니까?

2) 정답 (사용자의 대답에 대해 확인할 것임)이 데이터베이스에 저장되어 있다고 가정하면 확인을 위해 match_answer javascript 함수에 구현하기 위해 데이터베이스에서 정답을 얻는 방법을 어떻게 알 수 있습니까? 사용자의 대답은 무엇입니까?

나를 도와 줄 수있는 도움이나 자원은 매우 감사하겠습니다.

답변

0

1) match_answer javascript 함수에서 서버 응용 프로그램의 AJAX 게시물을 사용하여 현재 수행중인 단계를 업데이트하십시오.

2) 자바 스크립트에서 정답 또는 가능한 질문 목록과 정답을 알아야합니다. 이 정보를 얻는 한 가지 방법은 gon gem을 사용하는 것입니다. 기본적으로 컨트롤러에서 @instance 변수처럼 데이터를 설정할 수 있습니다. 단지 자바 스크립트에서만 사용할 수 있습니다. 단점은 사용자가 페이지에서 뷰 소스를 수행하고 충분히 열심히 본 경우 대답이 표시 될 수 있다는 것입니다. 또 다른 방법은 AJAX get 요청을 통해 서버에서 별도로 가져 오는 것이지만 사용자가 트래픽을 스누핑하고 찾을 수는 있습니다.

각 대답마다 서버를 사용하기 때문에 AJAX를 사용하여 서버에 응답을 게시하는 것이 좋습니다. 맞다면 서버는 사용자가있는 단계를 업데이트하고 200 개의 상태 코드를 반환 할 수 있습니다. 잘못된 대답 인 경우 서버는 422 상태 코드를 반환 할 수 있습니다. 귀하의 아약스는 성공 콜백이나 아약스 요청의 오류 콜백을 사용하여 적절하게 대응할 수 있습니다.