我有一个带复选框的表单。表单映射到模型。 根据rails文档以防止在未选中复选框时发生问题且未发送此字段的任何内容,rails会在复选框之前生成隐藏字段,并将0作为值。 那是对的。
不正确的是,在我点击复选框并提交表单后,我可以在帖子请求中看到第一个被发送的值是1然后是值0(来自隐藏字段) 因此,复选框始终为0。
当文档说参数提取得到查询字符串中任何重复键的最后一次出现时,文档是正确的,但是post请求中的顺序不正确????
我使用rails 3.2.11。
查看
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<%= devise_error_messages! %>
<p><%= f.label :name %><br />
<%= f.text_field :name %></p>
...
<div><%= f.label :send_dayplan_info %><br />
<%= f.check_box :send_dayplan_info %>
<div><%= f.submit "Update" %></div>
<% end %>
控制器 ...
def update
...
if resource.update_with_password(params[resource_name])
....
end
end
摘要
当我调试和评估params [resource_name]时,它始终包含send_dayplan_info字段的值0
当我单击复选框时,我可以在firebug中看到post请求包含的值:
用户[send_dayplan_info] = 1
用户[send_dayplan_info] = 0
当我取消选中该复选框时,我可以在firebug中看到post请求包含的值:
用户[send_dayplan_info] = 0
下面是点击复选框的表格数据
UTF8:✓
_method:把
authenticity_token:....
用户[名称]:....
用户[send_dayplan_info]:1个
用户[send_dayplan_info]:0
生成的html的源代码是:
......
<div><label for="user_send_dayplan_info">Send dayplan info</label><br />
<input name="user[send_dayplan_info]" type="hidden" value="0" /><input id="user_send_dayplan_info" name="user[send_dayplan_info]" type="checkbox" value="1" />
<div><input name="commit" type="submit" value="Update" /></div>