2016-07-10 6 views
0

나는 사용자가 임베디드 JW 플레이어를 통해 운동 비디오를 볼 수있는 웹 사이트를 운영하고 있습니다. 비디오를 본 시간을 사용자 모델에 추가하고 싶습니다. 이미 데이터베이스 설정이 있지만 사용자 모델에 표시된 시간을 추가하는 방법을 모르겠습니다.떠날 때 모델 편집 Page

예를 들어, 사용자가 동영상을 3 분간 보는 경우이를 사용자 모델에 저장할 수 있기를 원합니다. 페이지를 떠날 때 메서드를 호출하여 비디오를 본 시간을 사용자 계정에 추가 할 수 있습니까?

답변

1

아약스 업데이트를 사용할 수 있습니다. 그러나 신뢰할 수 없으므로 페이지를 떠날 때이 업데이트를 실행하고 싶지 않습니다 (async을 해제하면 문제가 없습니다). 대신 Ajax 업데이트를 주기적으로 폴링하여 (10 초마다) 레코드를 업데이트해야합니다. 아래 제안 된 솔루션입니다.

VideosController : 당신의 js 파일에서

def show 
    video = Video.find(params[:id]) 
    # Assuming Video belongs_to User, User has two fields called started_watching_at and duration 
    video.user.update_attribute(:started_watching_at, [current_time]) 
    video.user.update_attribute(:watching_duration, 0) 
end 

# This method is to update user watching time 
def touch_duration 
    video = Video.find(params[:id]) 
    # Calculate time different then convert to duration 
    duration = [current_time] - [started_watching_at] 
    video.user.update_attribute(:watching_duration, duration) 
    respond_to do |format| 
    format.js { render nothing: true } 
    end 
end 

, 당신은 기본적으로 touch_duration 방법을 사용하여 업데이트 사용자 레코드를 폴링합니다. 이런 식으로 뭔가 :

$(function() { 
    var time_to_check = 10000; 
    setInterval(time_to_check, touch_duration); 

    function touch_duration() { 
    // Update user 
    $.ajax({ 
     url: // update url, 
     method: "PUT" 
    }, function(data) { 
     console.log("Successfully update!"); 
    }); 
    } 
}) 

업데이트 : 난 당신이 비디오 쇼 페이지 만 내 아약스 업데이트를 실행할 수 있음을 언급하는 것을 잊었다. 나는 당신이 그것을 쉽게 해결할 수 있다고 생각합니다.

귀하의 질문에 대한 답변입니다. 건배!

+0

정말 잘 보입니다. 이로 인해 동영상이 일시 중지 된 경우에도 계속 시청할 것으로 보입니까? – Doughtz

+0

예, 페이지에 머무르는 한 오래 유지됩니다. – kasperite

0

두 번째로 나는 kasperite가 말한 것이다. 위치를 미세하게 제어하기 위해 할 수있는 또 다른 방법은 위치를 저장하기 위해 localStorage를 사용하는 것입니다.