2014-10-27 55 views
0

我有一個從Google電子表格中遠程導入某些產品的導軌形式。在這樣做的時候,它通過將其company.import_status設置爲「開始」,當導入開始時以及「完成」完成後更新制作這些產品的公司。如何從數據庫中獲取更新的值並使用ajax在頁面上顯示它

我有一個顯示company.import_status的頁面,我嘗試更新它,以便我可以看到導入何時開始以及何時完成。我的代碼如下所示:

$(document).ready(function(){ 
    <% @companies.each do |company| %> 
    setInterval(function(company){ 
     $.ajax({ 
     type : 'GET', 
     url : 'import', 
     dataType : 'html', 
     success : function(company){ 
      $("#company_<%=company.id%>").html("<%= escape_javascript(Company.where(id: company.id).first.import_status) %>"); 
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 
      alert('Error!'); 
     } 
     }); 

    }, 1000); 
    <% end %> 
}); 

由於某些原因,該字段未得到更新。它從「開始」開始,並保持這種狀態。我可以改變什麼來解決這個問題?如果我試着通過控制檯獲得它,它會給我正確的價值。

更新:

這是我的導入方法

def import 
    @companies = Company.find(params[:company].values.map{ |c| c[:id] }.compact) 
    @companies.each do |company| company.key = params[:company].values.select {|c| c[:id] == company.id.to_s}.first[:file] if !company.import_in_progress? company.import_start 
end 
end 
respond_to do |format| 
    format.html { redirect_to admin_import_index_path } 
    format.js 
end 
end 
+0

你在哪裏更新該字段(我指的是代碼),請在此處添加 – anusha 2014-10-27 08:11:09

+0

表單提交做到這一點。 – ivanacorovic 2014-10-27 09:19:25

+0

請將此添加到您的問題,以便明確 – anusha 2014-10-27 09:20:51

回答

0

發生了什麼事情是,ruby代碼被編譯和一種硬編碼的第一,所以當javascipt發生時,無論是最初設置在紅寶石保持這種方式。這就是爲什麼我一直在「開始」。這就是我的方法代替:

$(document).ready(function(){ 
    setInterval(function() { 
    $.get("/companies.json", function(data){ 
     $.each(data, function(index, c) { 
     var field = "#company" + "_" + c["id"]; 
      $(field).html(c["import_status"]); 
      console.log(field); 
     }); 
    }); 
    }, 5000); 
}); 
0

需要重新載入記錄,以獲得最新更新ones..use reload。我用它來得到confirmation_token這在某種程度上給我舊的...所以我用它從數據庫中獲取最新數據..

User.find(current_user.id).reload 

..希望它幫助

+0

我還是會得到同樣的東西.. – ivanacorovic 2014-10-27 09:16:17

相關問題