离开页面时编辑模型
Edit Model Upon Leaving Page
我有一个网站,用户可以通过嵌入式 JW Player 观看锻炼视频。我想将他们观看视频所花费的时间添加到他们的用户模型中。我已经设置了数据库,但我不知道如何将观看时间添加到他们的用户模型中。
例如,如果用户观看了 3 分钟的视频,我希望能够将其存储在用户模型中。如何在离开页面时调用方法,以便将他们观看视频的时间添加到他们的用户帐户中?
您可以为此使用 ajax 更新。但是,您不想在离开页面时触发此更新,因为它不可靠(不确定关闭 async
是否会有任何好处)。相反,您应该定期(比如每 10 秒)轮询 ajax 更新以更新记录。以下是我建议的解决方案。
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 更新视频显示页面。我想你可以轻松解决这个问题。
希望这能回答您的问题。干杯!
我支持@kasperite 所说的。为了更好地控制位置,您可以做的另一件事是使用 localStorage 来存储位置。
我有一个网站,用户可以通过嵌入式 JW Player 观看锻炼视频。我想将他们观看视频所花费的时间添加到他们的用户模型中。我已经设置了数据库,但我不知道如何将观看时间添加到他们的用户模型中。
例如,如果用户观看了 3 分钟的视频,我希望能够将其存储在用户模型中。如何在离开页面时调用方法,以便将他们观看视频的时间添加到他们的用户帐户中?
您可以为此使用 ajax 更新。但是,您不想在离开页面时触发此更新,因为它不可靠(不确定关闭 async
是否会有任何好处)。相反,您应该定期(比如每 10 秒)轮询 ajax 更新以更新记录。以下是我建议的解决方案。
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 更新视频显示页面。我想你可以轻松解决这个问题。
希望这能回答您的问题。干杯!
我支持@kasperite 所说的。为了更好地控制位置,您可以做的另一件事是使用 localStorage 来存储位置。