2012-06-25 49 views
1

我想發送一個javascript數組,由我的控制器中的方法處理。 我覺得我這樣做是錯誤的。我是一個總RoR,jquery和ajax noobie。這是我的。請給我一些指導原則:Ruby on Rails:將JavaScript數據發送給ruby控制器

<div id="dataTable" class="dataTable" style="width: 680px;height: 300px; overflow: scroll"></div> 
<button>Save!</button> 
<script> 
    var first = true; 
    var totalChanges = new Array(); 
    $("#dataTable").handsontable({ 
     //...some code that generates appropriate array totalChanges 
    }); 
    var data = //..some code 
    $("#dataTable").handsontable("loadData", data); 
    $(function() { 
      $("button").button(); 
      $("button").click(function() { 
        alert("clicked"); 
        $.ajax({ 
          type: "POST", 
          url: "save", 
          data: JSON.stringify(totalChanges), 
          success: function() { alert("Success!"); } 
        }); 
      }); 
    }); 

</script> 

我得到這個錯誤:

POST http://10.10.136.244:6500/qtl_table/save 500 (Internal Server Error) 

Started POST "/qtl_table/save" for 10.64.229.59 at Mon Jun 25 16:58:46 -0500 2012 
    Processing by QtlTableController#save as 
    Parameters: {"125,0,\"\",\"Ph upt 1-2\""=>{","=>{"125,1,\"\",\"DOR364\""=>{","=>{"125,2,\"\",\"G19833\""=>nil}}}}} 
LOGGER WORKS 
Completed 500 Internal Server Error in 81ms 

ActionView::MissingTemplate (Missing template qtl_table/save with {:formats=>[:html], :handlers=>[:rjs, :rhtml, :erb, :rxml, :builder], :locale=>[:en, :en]} in view paths "/usr/home/benjamin/phavubase/qtl/app/views", "/usr/home/benjamin/phavubase/qtl/ruby/1.8/gems/declarative_authorization-0.5.5/app/views", "/usr/home/benjamin/phavubase/qtl/ruby/1.8/gems/devise_cas_authenticatable-1.1.1/app/views", "/usr/home/benjamin/phavubase/qtl/ruby/1.8/gems/devise-1.2.1/app/views", "/usr/home/benjamin/phavubase/qtl/ruby/1.8/gems/kaminari-0.12.4/app/views"): 
    app/controllers/qtl_table_controller.rb:18:in `data' 
    app/controllers/qtl_table_controller.rb:25:in `save' 

Rendered ruby/1.8/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.8ms) 

編輯: 應用程序/控制器/ qtl_table_controller.rb

... 
    def save 
    logger.debug "\nLOOK! WE SAVED! #{params[data]}\n" 
    render "index" 
    end 
... 

我加了rende r:layout => false,但我仍然收到缺少的模板錯誤。另外,有人建議我剛開始添加邏輯到我的控制器,但數據參數看起來非常怪異。它應該是一個數組,我變成了一個字符串。你們能給我更多的幫助嗎?

+0

你可以發佈你的控制器代碼來呈現什麼?有可能它可能正在保存,只是試圖在之後渲染模板。 – agmcleod

+0

我目前在我的控制器中沒有任何邏輯。 – bdeonovic

回答

0

您應該在app/views/qtl_table/save.html.erb中創建一個模板或在控制器中渲染一些東西。如果控制器操作中沒有任何內容,Rails會嘗試顯示默認模板,而您沒有。

+0

我已在我的控制器中呈現「索引」(即該應用程序當前所在的頁面)。我希望頁面在點擊保存按鈕後重新加載 – bdeonovic

0

同意Riateche的回答。您需要將一些邏輯添加到控制器才能正確響應。

看着你的控制檯輸出,你可以看到參數散列中的json數據。您可以簡單地訪問控制器中的值,例如:

params["125,0,\"\",\"Ph upt 1-2\""] 
params["125,0,\"\",\"Ph upt 1-2\""][","] 

您可以將它映射到您的activerecord模型並保存。

+0

我的參數似乎沒有道理,它應該是一個數組數組。我做錯了什麼 – bdeonovic

0

既然你想讓它在AJAX迴應,你可以告訴Rails不加

render :layout => false 

控制器動作

+0

我加了這個,但我仍然得到了缺少的模板錯誤。 – bdeonovic