我有一个网站,用户可以通过嵌入式JW播放器观看运动视频。我想把他们花在观看视频上的时间添加到他们的用户模型中。我已经设置了数据库,但是我不知道如何将观察到的时间添加到他们的用户模型中。
例如,如果用户观看3分钟的视频,我希望能够将其存储在用户模型中。如何在离开页面时调用一个方法,以便将他们观看视频的时间添加到他们的用户帐户中?
发布于 2016-07-11 00:10:56
为此,您可以使用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更新。我想你可以很容易地解决这个问题。
希望这能回答你的问题。干杯!
发布于 2016-07-11 00:34:09
卡斯佩利特说的话我不同意。要更好地控制位置,可以做的另一件事是使用localStorage存储位置。
https://stackoverflow.com/questions/38297137
复制相似问题