在模型上,我有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
是如何被解释为“不允许的”当我明确地允许它。
'params.inspect'的输出是什么? – 2015-04-06 09:51:25
我不得不将'def email_params'改为:'params.require(:user).permit(email_settings:[:general])' – cilphex 2015-04-06 09:59:47