2012-06-17 44 views
0

瀏覽很多的解決方案,不適合或解決我的問題我張貼此問題在這裏後陣列控制器回報率將它發送給軌道控制器。這對正常變量正常工作,但我不能讓它與數組一起工作。這是我做的:後的JavaScript使用窗體隱藏字段

的Javascript(jQuery的):

$("#my_form").submit(function() { 
    var testvar = 5; 
    var testarr = []; 
    testarr[0] = "test data"; 
    testarr[1] = "other data"; 

    $('input[name=testvar]').val(testvar); 
    $('input[name=testarr]').val(JSON.stringify(testarr)); 
}) 

回報率控制器:

def create 
    testvar = params[:testvar] 
    data = params[:testarr] 
    testarr = ActiveSupport::JSON.decode(data) 
    // other commands 
end 

它工作正常的testvar但對於數組它始終創建錯誤

can't convert nil into String 

我在做什麼錯?

請求如下:

{"utf8"=>"✓", 
"authenticity_token"=>"1qFA3NTqUxoI1jusbwrVi5AWIpJz9tbUGR0KuCtNKTs=", 
"testvar"=>"5", 
"testarr"=>"[\"test data\", 
\"other data\"]", 
"commit"=>"Submit my form data"} 

在預先感謝您的幫助是高度讚賞!

回答

1

如果你的名字有[]在結束你的輸入字段,鐵軌將其映射到PARAMS作爲數組

<input type="hidden" name="testarr[]" /> 

$(....).val(testarr.join(",")) 

或追加新的輸入每個而不是加入,它們都具有相同的輸入命名

$(....).submit(.... 
    $form = $(this) 
    testarr.each 
    $form.append('<input type="hidden" name="testarr[]" value="...itemValue..." />') 

在控制器

params[:testarr].each do .... 

上鍵入一個iPad,請原諒不完整的代碼,H它實際上給你一些想法

+0

我昨天晚上真的這樣做,只是在控制器上分割',',但顯然這更好。真棒! – Chris