Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 复选框帮助程序是否发送额外参数?_Ruby On Rails_Forms_Checkbox - Fatal编程技术网

Ruby on rails 复选框帮助程序是否发送额外参数?

Ruby on rails 复选框帮助程序是否发送额外参数?,ruby-on-rails,forms,checkbox,Ruby On Rails,Forms,Checkbox,但是,如果我关闭隐藏字段,当前面的框未选中时,我的表单会“窃取”彼此的数据,从而导致其他问题。例如,在这里,我未选中第一个表单: 参数:{“utf8”=>“✓", "真实性令牌“=>”qszyk+q+pJ77WuDh2/K2S8lTuBD99DptwqeEdDI4U+4YQBWIBCSYRUVGROFZH8HFDKXSXXN6YTPZ6DAGFRUA==”,“列表”=>“{”列表项“=>”[{{”数量“=>”1”,“用户项id”=>“20”,{“数量”=>“2”,“用户项id”=>“21”,{”

但是,如果我关闭隐藏字段,当前面的框未选中时,我的表单会“窃取”彼此的数据,从而导致其他问题。例如,在这里,我未选中第一个表单:

参数:{“utf8”=>“✓", "真实性令牌“=>”qszyk+q+pJ77WuDh2/K2S8lTuBD99DptwqeEdDI4U+4YQBWIBCSYRUVGROFZH8HFDKXSXXN6YTPZ6DAGFRUA==”,“列表”=>“{”列表项“=>”[{{”数量“=>”1”,“用户项id”=>“20”,{“数量”=>“2”,“用户项id”=>“21”,{”数量“=>“3”,“名称”=>,“创建列表”}

请注意,第一个未选中的表单忽略了将user_item_id设置为“nil”,而完全忽略了参数,偷走了下一个表单的user_item_id,从而弄乱了我的数量值(我将其设置为与之前相同)

为什么会这样

<%= form_for list do |f| %> <!-- This might be an issue in production mode -->
    <%= f.fields_for l = list.list_items.build, index: l.id do |list_item| %>
            <td><%= list_item.check_box :user_item_id, { checked: false, include_hidden: false }, item.id, "nil" %></td> <!-- checkboxes seem problematic, try check_box_tag? -->
            <td><%= item.name %></td> 
            <td>$<%= number_with_precision(item.price, :precision => 2) %></td>
            <td><%= list_item.number_field :quantity, 
                                                                            min: 1,
                                                                            class: "num"%></td>
    <% end %>
<% end %>

PS:我最初的“nil”只有nil,但是这样做可以防止未检查的值在任何情况下被传递,并且我遇到了表单相互窃取值的问题,就像我在上面发布的那样。如果有人能告诉我怎么做,使一个未选中的框意味着我的字段将不会被提交,这将是伟大的

这是由rails完成的,以便在取消选中复选框时发送正确的值

如果不选中复选框,隐藏字段的值(由复选框帮助程序添加)将到达服务器,因为浏览器不会发送未选中的复选框

另一方面,当您选中它时,最后一个同名值将获胜,这意味着选中的值将被发送到服务器,并且一切都将按照您的预期工作

从:

明白了

HTML规范说未选中的复选框不成功, 因此,网络浏览器不会发送它们。不幸的是,这引入了 答:如果一个发票模型有一个付费标志,并且以 编辑已付款发票用户取消选中其复选框“无已付款” 参数被发送。那么,任何类似于 @invoice.update(params[:invoice])不会更新标志

为了防止出现这种情况,助手会在之前生成一个辅助隐藏字段 “非常”复选框。隐藏字段具有相同的名称及其名称 属性模拟未选中的复选框

这样,客户机要么只发送隐藏字段(表示 复选框未选中),或同时选中两个字段。自从HTML 规范规定键/值对必须以相同的顺序发送 它们出现在表单中,参数提取得到最后一个 在查询字符串中出现任何重复的键,该键适用于 普通形式

Parameters: {"utf8"=>"✓", "authenticity_token"=>"sn2HLFvVLX7ZFxBTHvRGz25H+bbyiVl8E8Kok5J7788q8WA33U8RpWmLXjU2GTjD2ybW7RMaiX1CwLJ6oCLXmQ==", "list"=>{"list_item"=>[{"user_item_id"=>"nil"}, {"user_item_id"=>"19", "quantity"=>"1"}, {"user_item_id"=>"nil"}, {"user_item_id"=>"20", "quantity"=>"2"}, {"user_item_id"=>"nil"}, {"user_item_id"=>"21", "quantity"=>"3"}], "name"=>""}, "commit"=>"Create List"}