2016-07-10 13 views
0

私は、ユーザーが埋め込みJW Playerを使ってエクササイズビデオを見ることができるウェブサイトを持っています。彼らのユーザーモデルにビデオを見た時間を追加したいと思います。私はすでにデータベースの設定をしていますが、私は自分のユーザモデルに注目した時間をどのように追加するのか分かりません。モデルを編集して編集するページ

たとえば、ユーザーがビデオを3分視聴した場合、そのユーザーモデルにそれを保存できるようにしたいと考えています。ページを離れるときにメソッドを呼び出すにはどうすればよいのですか?動画を見た時間をユーザーアカウントに追加できますか?

答えて

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の更新を実行することを言及するのを忘れてしまいました。私はあなたが簡単にそれを働かせることができると思います。

あなたの質問にお答えします。乾杯!

+0

これは本当にうまく見えます。これにより、ビデオが一時停止されても監視された時間が追加され続けますか? – Doughtz

+0

はい、あなたがページにとどまっている限りです – kasperite

0

もう一度@kasperiteが言った。位置を細かく制御できるもう1つの方法は、localStorageを使用して位置を格納することです。

関連する問題