使用表单隐藏字段将javascript数组发布到RoR控制器

时间:2012-06-17 14:03:37

标签: javascript jquery json ruby-on-rails-3.1

在浏览了许多不适合或解决我问题的解决方案后,我在这里发布了这个问题:

我使用javascript在数据表单中填充隐藏字段并将其发送到rails控制器。这适用于普通变量,但我不能让它与数组一起使用。这就是我的工作:

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));
})

RoR控制器:

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 个答案:

答案 0 :(得分:1)

如果您在末尾用[]命名输入字段,rails会将其作为数组映射到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上键入,请原谅不完整的代码,希望它能为您提供一些想法