【问题标题】:javascript-made array not being sent to controller as an array?javascript 制作的数组没有作为数组发送到控制器?
【发布时间】:2016-06-15 03:17:44
【问题描述】:

我有一个视图`events/new.html.erb,其中包含:

<%= hidden_field_tag 'id_array[]', [], id: 'parti_ids'  %>

<%= f.submit "Create Meeting", class: "btn-submit" %>

因此,在提交时, id_array[] 作为数组发送到我的events_controller#create 操作。 我遇到的问题是,例如,如果我想要id_array = [3,4,5],它会以["3,4,5"] 而不是["3","4","5"] 的形式在控制器上传递和接收。

这是我的application.js 中的代码:

var idList = [];

$(document).on('click', "#check-button", function(){

   ....

    $("#check-list li input").each(function(){ //for each listed colleague...
        if( $(this).is(":checked")){ //if check-box is ticked

            idList.push($(this).val()); //add id to idList

        }
    });

    $('#parti_ids').val(idList); //sets idList array to be value of parti_ids hidden_tag_field in view

});

我觉得这与 $('#parti_ids').val(idList); 行有关,因为这是实际设置 parti_ids 的唯一地方。但我不知道这样设置数组值有什么问题,或者为什么它会使用 ["3,4"] 而不是 ["3","4"]。

为了向你展示我是如何在我的控制器中使用它的,这里有一个 sn-p:

participants = params[:id_array]
participants.each do |id|
   puts(id) #THIS PUTS THE ENTIRE VALUE OF PARTICIPANTS INSTEAD OF EACH ID
end

【问题讨论】:

  • 为什么不使用将多个选项设置为 true 的复选框表单助手,而不是创建数组客户端?
  • @Rubysmith 我不确定我明白你的意思吗?
  • @Rubysmith 因为数组仍有机会在其他地方更改,所以我希望它在计算完成后提交。您能否建议我如何重新编写设置#parti_ids 值的行?
  • 问题不在于 JavaScript,而在于 hidden_​​field_tag 以及 Rails 如何处理参数。我想您可能必须为每个复选框生成一个隐藏字段。

标签: javascript ruby-on-rails arrays ruby


【解决方案1】:

删除此行。

<%= hidden_field_tag 'id_array[]', [], id: 'parti_ids'  %>

并添加这个。

<input type="hidden" name="id_array" id="parti_ids" />

然后拆分它。

  participants = params[:id_array]
  participants.split(',').each do |id|
    puts(id) #THIS PUTS EACH ID
  end

【讨论】:

  • 这样做会导致 id_array 作为字符串“3,4,5”而不是数组传递给控制器​​,因此它不允许我做参与者.each
  • 好的,这对我之前的控制器没有任何影响。它仍在接收 ["3,4,5"] 而不是 ["3","4","5"]
  • 以上答案是目前最简单的解决方法。
猜你喜欢
  • 2013-07-24
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2012-04-17
  • 1970-01-01
  • 2019-06-21
相关资源
最近更新 更多