在模型上,我有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;当我明确允许时。
答案 0 :(得分:1)
从浏览器应始终发送响应。 如果您没有选中该框,则会发送隐藏字段以了解已发送的内容。
通过这种方式,导轨将始终显示是否选中了该框。
类似的答案在这里:Why does the check_box form helper generate two checkboxes, one hidden?