离开页面时编辑模型

时间:2016-07-10 22:51:41

标签: ruby-on-rails jwplayer

我有一个网站,用户可以通过嵌入式JW播放器观看练习视频。我想将他们花在观看视频上的时间添加到他们的用户模型中。我已经有了数据库设置,但我不知道如何将观看的时间添加到用户模型中。

例如,如果用户观看3分钟的视频,我希望能够将其存储在用户模型中。如何在离开页面时调用方法,以便将观看视频的时间添加到用户帐户中?

2 个答案:

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