离开页面时编辑模型

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 来存储位置。