2017-10-18 4 views
0

私はジャックポット賭博サイトを作成しようとしています。ユーザーがポットにお金を追加するときに、コントローラにポットを更新する方法があります。私はホームページにポットの合計を表示し、誰かがポットにお金を追加するとすぐにそれをAjaxで更新したいと考えています。私はgon gemを使用して、コントローラーからジャバスクリプトまでの壷の合計などの変数を渡します。これは、ページがリロードされたときに機能しますが、ajaxを使用してupdateメソッドが呼び出されたときには機能しません。相続人Ajaxリクエスト中にGon変数がjsをレールコントローラから渡さない

私をPagesController:

def home 
    @jackpot = Jackpot.last 
    gon.pot = @jackpot.pot 
end 

JackpotsController:

def update 
    @jackpot = Jackpot.find(params[:id]) 
    if params.has_key?(:amount) 
    @jackpot.update(pot: @jackpot.pot + params[:amount].to_f) 
    gon.pot = @jackpot.pot 
    end 
    respond_to do |format| 
    format.js 
    end 
end 

Javascriptを:(URLで:idは今のハードコードされた)

$("#bet-btn").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "/jackpot/update/21", 
     datatype: "json", 
     success: function() { 
      console.log("Pot size: " + gon.pot); 
      updatePot(); 
     }, 
     error: function() { 
      console.log("error") 
     } 
    }); 

});特にJavaScriptの/アヤックスので、レールとすること(もハードコード量)

<%= link_to "Place Bet", update_pot_path(@jackpot, :amount => 
0.1), method: :post,:remote => true, id: "bet-btn", class: "btn btn-info btn-lg" %> 

私はかなり新しいです:

これは、ポットのための賭けを配置する

function updatePot() { 
    updateDonutChart('#jackpot-donut', gon.pot , true); 
} 

ボタンをドー​​ナツプログレスバーを更新しますどんな助けもありがとう。ありがとう!コントローラで

+0

'console.log("ポットサイズ: "+ gon.pot);'更新されたポット値を表示して期待通りに動作しますか?また、開発者コンソールにもエラーはありますか? – abax

+0

@abaxいいえ、それは古いgon.pot(現在は更新されていませんが)を表示します。ページがリフレッシュされ、ajaxリクエストが再度送信されると、新しい値が表示されます。 gon.potは#homeアクションのページに設定されているので、これは(私が思う)です。 – RT5754

+0

「gon.watch」、https://github.com/gazay/gon/wiki/Usage-gon-watchを試してみてください – abax

答えて

1

、単にJSONへの対応:$.ajaxを投稿する際に

respond_to do |format| 
    format.json { render json: { pot: @jackpot.pot } } 
end 

は、データ型を指定します。新しいデータは成功関数に渡されるので、gon.potではなく、data.potです。

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: function(data) { 
    console.log('pot', data.pot); 
    } 
}); 
+0

あなたはヒーローのおいおかげさまでとてもありがたいです – RT5754

+0

お手伝いを! @jackpot全体(またはそのページに関連するものすべて)を返すことと、より堅牢なものを使用してjsonオブジェクトを構築することを検討してください。JBuilder、Active Modelシリアライザなど – Leito

+0

はお試しいただきありがとうございます! – RT5754

関連する問題