2016-01-29 39 views
11

現在、質問に答えるために残った秒数をカウントするタイマーを使用して、Railsクイズアプリケーションを作成しています。以下のようなので、秒のインスタンスをタイマーの変数を作成し、それクイズのJavaScriptの一部作る:バックエンドでリセットされるRailsでのカウントダウンタイマーの作成

Quiz = function() { 
    this.quizCurrent = 0; 
    this.score = 0; 
    this.seconds = 10; 
    this.timing = this.seconds; 
    this.container = $('#trivia'); 
    this.participationId = null; 
} 

Quiz.prototype.init = function() { 
    $('#trivia').on('click', '.btn.btn-primary-questions', this.checkAnswer.bind(this)); 
    $('div.timer strong').text(this.seconds) 

    this.start(); 
} 

私は考え私の最初のバージョンで

は、私がこれに簡単な方法をしましたこれをRailsを使ってバックエンドに移動したいと思っています。以前の質問はcountdown gemを参照していますが、それは2つの問題があるようです。

1)日付/時刻を繰り返し呼び出し、各質問(私はカウントダウンではできないと思います)に対して検証する必要があります。そして;

2)私は理想的には、この値を変数としてJavascriptに渡すことができます。

この宝石のドキュメントには、カウントダウン時間をビューに直接渡す方法が示されています。 (それはゼロに当たったとき、他の言葉で)しかし、私は間違った答えを記録しながら、私の検証の一環として、以下のように、次の質問にユーザーを強制的にカウントダウン値を使用しています:

Quiz.prototype.timer = function() { 
var that = this; 

this.timing--; 
    $('div.timer strong').text(this.timing); 
    if (this.timing <= 0) { 
    self.stop(); 
    $.getJSON('/api/skip_question/' + this.participationId, function() { 
    that.nextQuestion(); 
    }) 
    }} 

任意のアイデアバックエンドの時間を「チェック」しながら、クイズチェックをして時間がなくなっていないことを確認する方法については?

答えて

1

私はカウントダウンの宝石について何も知らないが、簡単な解決策が思い浮かぶ。

バックエンドにタイムスタンプを保持し、jsクイズが開始されると、クイズが開始されたことをバックエンドに知らせることができます。バックエンドで

$.getJSON('/api/start_quiz/', function() { 
    //do whatever javascript starts the quiz. 
}) 

、あなたが対応するデータベース値を持つQuizAttemptモデル「attempt_timestamp」を持っていると仮定することができます:

def start_quiz 
    QuizAttempt.create(user_id: current_user.id, attempt_timestamp: Time.now) 
end 

その後、あなたは時間があなたのskip_question上で実行しているかどうかを判断する前に、フィルタを持つことができますanswer_questionエンドポイント。 (私の例では8分の時間制限があります

before_filter :check_time, only: [:skip_question, :answer_question] 

def check_time 
    #get last attempt 
    last_attempt = QuizAttempt.where(user_id: current_user.id).last 
    if (last_attempt.attempt_timestamp + 8.minutes) < Time.now 
    #time is up 
    return false 
    end 
end 

サイドアイデア:あなたはまた、DBのタイムスタンプでJSクロックをsyncronizingの目的のために記録されたタイムスタンプで応答したエンドポイントを追加することができ

編集:タイムスタンプをデータベースではなくセッションに保存する可能性のある別の場所

関連する問題