我有一个网站,用户可以通过嵌入式JW播放器观看练习视频。我想将他们花在观看视频上的时间添加到他们的用户模型中。我已经有了数据库设置,但我不知道如何将观看的时间添加到用户模型中。
例如,如果用户观看3分钟的视频,我希望能够将其存储在用户模型中。如何在离开页面时调用方法,以便将观看视频的时间添加到用户帐户中?
答案 0 :(得分:1)
您可以使用ajax更新。但是,您不希望在离开页面时触发此更新,因为它不可靠(不确定关闭async
是否会有任何好处)。相反,您应该定期轮询您的ajax更新(每10秒说一次)来更新记录。以下是我建议的解决方案。
<强> VideosController 强>:
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
在您的js文件中,您基本上想要使用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!");
});
}
})
更新:我忘了提及您可能只想在视频节目页面中运行ajax更新。我想你可以轻松解决这个问题。
希望能回答你的问题。干杯!
答案 1 :(得分:0)
我是@kasperite说的第二个。你可以做的另一件事就是使用localStorage存储位置。