为什么这个表单助手会生成两个输入?

时间:2015-04-06 08:48:17

标签: ruby-on-rails ruby-on-rails-4

在模型上,我有attr_accessor: :email_settings

在一个视图中,我有:

<%= form_for some_model do |f| %>
    <%= f.fields_for :email_settings do |email_settings| %>
        <%= email_settings.label :general, _("General updates") %>
        <%= email_settings.check_box :general %>
        General site updates
    <% end %>
<% end %>

但是在HTML中,这不会为some_model[email_settings][general]创建一个输入,它会创建两个。一个隐藏,一个复选框:

<label for="user_email_settings_general">General updates</label>
<input name="user[email_settings][general]" type="hidden" value="0">
<input id="user_email_settings_general" name="user[email_settings][general]" type="checkbox" value="1">
General site updates

这里发生了什么?当我只想要一个复选框时,为什么会有隐藏的输入和相同值的复选框?

同样在提交表单的控制器操作中,我这样做:

def update
    puts "email_params: #{email_params}"
end

def email_params
  params.require(:user).permit(:email_settings)
end

哪个输出:

Unpermitted parameters: email_settings
email_params: {}

不确定email_settings如何被解释为&#34;未经许可&#34;当我明确允许时。

1 个答案:

答案 0 :(得分:1)

从浏览器应始终发送响应。 如果您没有选中该框,则会发送隐藏字段以了解已发送的内容。

通过这种方式,导轨将始终显示是否选中了该框。

类似的答案在这里:Why does the check_box form helper generate two checkboxes, one hidden?