rails check_box始终具有0值

时间:2013-04-22 21:10:02

标签: ruby-on-rails-3

我有一个带复选框的表单。表单映射到模型。 根据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>

0 个答案:

没有答案