[英]Update checkbox value in a Rails index view by using Ajax
我想在Rails應用程序中應用一個小的Ajax示例。 我在索引視圖中有一個帶有復選框的項目模型。 我為在索引視圖中呈現的復選框創建了一個form_for。 我想檢查復選框並更新數據庫中的復選框值。 我正在學習Ajax,並通過添加beforeSend和function(data)進行了一些測試。 從我閱讀的內容來看,Ajax具有POST和GET。 如果我添加類型:'POST',Rails會嘗試創建一些東西,找不到有效的路由路徑,並且會出錯。 我想更新在Rails中是PUT的數據庫中的復選框值。 我應該如何進行? 您能指出我正確的方向嗎?
這是我在索引視圖中呈現的表單。
<%= 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>
靜態路由將“ PUT”和“ DELETE”方法分配給各種請求,但實際上,由於許多瀏覽器(也許只是IE的某些版本)不允許使用這些http方法,因此往往不使用它們。 因此,實際上您只發送GET和POST請求。
解決方法是發送一個額外的參數"_method"
(注意下划線),您可以將其設置為“ PUT”或“ DELETE”。 所以,如果您要添加
"_method": "PUT"
到ajax調用的數據,然后Rails應該將其作為PUT請求處理。 我真的不知道在定義form_data然后不使用它時ajax中發生了什么。
如果在rails中使用form_for
輔助程序,並且它調用了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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.