2

私は一種の初心者なので、我慢してください!

ユーザーがダッシュボードにサインインしているときに、jQueryがX秒ごとにサーバーに定期的にpingを実行し、ユーザーの「ハートビート」を現在の日時で更新し、「オンライン」をtrueに設定しようとしています。

私はおそらくいくつかのRESTfulな概念とjQueryとRails間の通信を含む概念を見逃しています。MichaelHartlのRubyonRailsチュートリアルを終了し、彼のサンプルアプリを構築しています。

私は調査を行いましたが、答えは主にフォームへの記入を含みます。私はこれを1つなしでやりたいです。

したがって、どういうわけかjQueryに:user_idを渡して、それを正しいURIにリンクする必要があります。状態コントローラーと、ユーザー(そのうちの1人)に属する状態モデルがあります。ハートビートとオンラインは状態テーブルにあります。

rakeルートは次のことを示しています。PUT/states/:id(.: format)states#update

States_controller.rb

class StatesController < ApplicationController
  before_filter :signed_in_user, only: [:thump]
  before_filter :correct_user,   only: [:thump]

  def new
  end
  def update
    @user = User.find(params[:id])
    user.update_attributes(heartbeat: Time.now, online: true)

    respond_to do |format|
      format.js
    end
  end
end

application.js

jQuery.ajaxSetup({ 
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})

// Periodically updates heartbeat
$(function(){
    setInterval (thump, 3000);
    var js = '<thump> ';
    function thump(){
        console.log(js + 'Test');       
        $.ajax({
            url: 'states/update',
            type: 'POST',
            success: function(result) {
                console.log(js + result);
            }
        });
    }
});

助けてくれてありがとう。

4

2 に答える 2

0

実行しようとしているユーザーが現在サインオンしているユーザーと同じである場合は、何も渡す必要はないようです。IDを渡す代わりに、コントローラーでcurrent_user(またはその他)を使用してください。同じオブジェクトを再度フェッチします。

于 2012-11-08T06:38:45.460 に答える
0

.jsファイルを次のように変更してみませんか。

function giveLife(url) {
    setInterval (thump, 3000);
    var js = '<thump> ';
    function thump(){
        console.log(js + 'Test');       
        $.ajax({
            url: url,
            type: 'POST',
            success: function(result) {
                console.log(js + result);
            }
        });
    }
}

ハートビートを開始するビューにこれを配置します。

<script type="text/javascript">
    $(function(){
         giveLife(<%= states_path(@state, @user_id).to_json %>);
    });
</script>
于 2012-11-08T06:40:28.233 に答える