简单形式重复输入

时间:2016-02-16 06:41:51

标签: ruby-on-rails ruby simple-form

我使用ruby simple_form生成一个带有复选框的表单。表单使用以下内容呈现:

<%= simple_form_for(@user) do |f| %>
  <%= f.input :receive_notifications, as: :boolean, label: 'Receive Notifications' %>
<% end %>

这会输出html:

<form accept-charset="UTF-8" action="/admin/users/9" class="simple_form edit_user" id="edit_user_9" method="post" novalidate="novalidate">
  <div style="display:none">
    <input name="utf8" type="hidden" value="✓">
    <input name="_method" type="hidden" value="patch">
    <input name="authenticity_token" type="hidden" value="m2rM8t/lZ1g3UfYER4xFiNkHKpDX5GrpjdapQCLPKHQ=">
  </div>
  <div class="form-group boolean optional user_receive_notifications">
    <input name="user[receive_notifications]" type="hidden" value="0">
    <label class="boolean optional control-label checkbox" for="receive_notifications">
      <input checked="checked" class="boolean optional" id="user_receive_notifications" name="user[receive_notifications]" type="checkbox" value="1">Receive Notifications
    </label>
  </div>
</form>

问题是,如何摆脱表单组内的重复输入?

编辑: 来自浏览器检查器的表单数据:

UTF8:✓

_method:补丁

authenticity_token:m2rM8t / lZ1g3UfYER4xFiNkHKpDX5GrpjdapQCLPKHQ =

用户[receive_notifications]:0

用户[receive_notifications]:1

1 个答案:

答案 0 :(得分:0)

你不是,你也不应该这样做。这是一个隐藏的值,可以解决浏览器无法填写的复选框的问题。

问题是:如果你只有一个(可见)复选框,然后你就不要点击它...... html根本不会发送该复选框的值。

这不是你想要的...你想要的是如果用户没有点击复选框,你会收到价值::user_receive_notifications => false

所以这就是Rails攻击html的方式,如果页面上有复选框但是没有选中,则总是发送该值。