아약스 업데이트를 사용할 수 있습니다. 그러나 신뢰할 수 없으므로 페이지를 떠날 때이 업데이트를 실행하고 싶지 않습니다 (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!");
});
}
})
업데이트 : 난 당신이 비디오 쇼 페이지 만 내 아약스 업데이트를 실행할 수 있음을 언급하는 것을 잊었다. 나는 당신이 그것을 쉽게 해결할 수 있다고 생각합니다.
귀하의 질문에 대한 답변입니다. 건배!
정말 잘 보입니다. 이로 인해 동영상이 일시 중지 된 경우에도 계속 시청할 것으로 보입니까? – Doughtz
예, 페이지에 머무르는 한 오래 유지됩니다. – kasperite