我有一个带有复选框的表格。表单映射到模型。根据 rails 文档以防止在未单击复选框且未发送此字段的任何内容时出现问题,rails 在复选框之前生成隐藏字段,值为 0。这是正确的。
不正确的是,在我单击复选框并提交表单后,我可以在发布请求中看到首先发送值 1,然后发送值 0(来自隐藏字段)因此,复选框始终值 0。
当文档说参数提取获取查询字符串中任何重复键的最后一次出现时,文档是正确的,但是发布请求中的顺序不正确????
我使用导轨 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 发布请求中看到包含值:
user[send_dayplan_info]=1
user[send_dayplan_info]=0
当我取消单击复选框时,我可以在 firebug post request 中看到包含值:
user[send_dayplan_info]=0
下面是单击复选框
utf8 的表单数据:✓<br> _method: putauthentity_token
:....
user[name]:....
user[send_dayplan_info]:1
user[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>