2012-11-08 47 views
2

我是一個小菜鳥,所以請耐心等待!使用jQuery和Rails定期ping服務器而不使用表格,更新表格

我想 - 當用戶在儀表板上登錄時 - 讓jQuery定期每隔X秒鐘ping服務器,並用當前日期時間更新用戶的'心跳'並將'online'設置爲true。

我可能會錯過一些涉及jQuery和Rails之間通信的RESTful概念和概念。剛剛完成了Michael Hartl的Ruby on Rails教程,並構建了他的示例應用程序。

我已經做了研究,但答案主要涉及填寫表格;我想這樣做沒有一個。

所以我需要以某種方式傳入jQuery a:user_id並將其鏈接到正確的URI。我有一個狀態控制器和一個屬於用戶的狀態模型(has_one)。 Heartbeat和Online在狀態表中。

耙路線表明:PUT /states/:id(.:format)指出#更新

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); 
      } 
     }); 
    } 
}); 

感謝您的幫助。

回答

0

如果您嘗試執行的用戶與當前簽名的用戶相同,則您似乎不需要傳遞任何內容,只需在控制器中使用current_user(或其他),而不是傳遞一個id並重新獲取同一個對象。

+0

這是真的...現在試試這個。 –

+0

對,我是KISS原則的忠實粉絲......祝你好運。 –

+0

另外,使用current_user使其更加防篡改。我不確定在這個特定的應用程序中它是否很重要,但是在將來類似的問題需要記住。 –

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> 
+0

投擲一個奇怪的錯誤。但我真的很喜歡這種方法...我在某處讀過js有一些問題逃避了鐵軌變數。這是怎麼回事? –

+0

'raw states_path(@state,@user_id).to_json' –

+0

並可能是'@ user.id' –