2016-01-15 45 views
0

我想在rails應用程序中應用小型Ajax示例。我在索引視圖中有複選框的項目模型。我爲我在索引視圖中呈現的複選框創建了一個form_for。我想檢查複選框並更新數據庫中的複選框值。 我正在學習Ajax,並通過添加beforeSend和函數(數據)來應用一些測試。從我讀的Ajax中有POST和GET。如果我添加類型:'POST'Rails會嘗試創建一些東西,不會找到有效的路由路徑並會出錯。我想更新Rails是PUT的DB中的複選框值。我應該如何繼續?你能指點我正確的方向嗎?使用Ajax更新Rails索引視圖中的複選框值

這是我在索引視圖中呈現的窗體。

<%= form_for(c, remote: true) do |k| %> 
<%= k.check_box :recyclable, :class => "active_testdef_cl", :id => "item_recyclable_#{c.id}", 'data-recyclable' => c.recyclable %> 
<% end %> 

這是腳本。

<script> 
    $(document).ready(function() { 
     for (var i=0; i < 2; i++) {   
      $('#item_recyclable_'+i).on('change', function(){    
      var url='/items' 
      var form_data = $('#cc_form').serialize; 
      var checkbox_value = $('#item_recyclable_'+i).val(); 
        $.ajax({ 
        type: 'GET', 
        url: url,     
        data: checkbox_value, 
         beforeSend:function(){ 
          // $('#test_message').innerHTML=("hello Christina"); 
          //alert("hi m") 
         },     
        success: function(data) { 
         //$('#test_result').html(data); 
          document.getElementById('test_result').innerHTML=data; 
        } 
       }); 
       return false; 
      }); 
     }; 
    }); 
</script> 

回答

0

寧靜的路由分配「PUT」和「刪除」的方法來各種請求,但實際上這些HTTP方法往往不能使用,因爲許多瀏覽器(也許只是IE的一些版本)不允許他們。所以,你實際上只發送GET和POST請求。

解決方法是發送一個額外的參數"_method"(注意下劃線),您將其設置爲「PUT」或「DELETE」。因此,如果您要添加到您的ajax調用數據,那麼Rails應該將其作爲PUT請求處理。當你定義form_data並且不使用它時,我不太清楚你的ajax中發生了什麼。

如果您在rails中使用form_for helper,並且它調用update操作,請查看瀏覽器中呈現的html。你會看到一個隱藏的div,其輸入如下:

<div style="display:none;"> 
    <input type="text" name="_method" value="UPDATE"> 
</div> 

這是Rails爲你設置的解決方法。請參閱http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark

+0

我正在通過檢查來自form_data和checkbox_value的內容來進行實驗。 – dennis

+0

謝謝Max。我會檢查它。 – dennis