我正在使用嵌套参数来体验这种奇怪的行为。
当我尝试保存表单时,它会显示Unpermitted parameter: organization_type
对于我的组织类型我只有一个模型,但我不认为这应该是问题,因为根据我的理解,属性是在用户控制器中处理的
我尝试在表单和控制器白名单中将属性设置为organization_type(单数),但这不起作用。
但是,在表单中,如果我有:organization_types
,则该字段将不会显示。
我对此感到很困惑。
快速回顾一下:
:organization_type
。如果我复数,则不显示:organization_types_attributes
:organization_types_attributes
用户模型
class User < ActiveRecord::Base
has_many :events
has_many :organization_types
accepts_nested_attributes_for :organization_types
end
组织类型模型
class OrganizationType < ActiveRecord::Base
belongs_to :user
ORG_TYPES = ['health', 'non-profit', 'foo', 'bar']
end
用户控制器
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
before_filter :authenticate_user!
...
def user_params
params.require(:user).permit(:name, ..., organization_types_attributes: [:id, :user_id, :org_type, '_destroy'])
end
用户表单
<%= form_for(@user) do |f| %>
...
<div class="field">
<%= f.label :organization_type %><br>
<%= f.fields_for :organization_type do |builder| %>
<%= builder.select :org_type, options_for_select(OrganizationType::ORG_TYPES) %><br/>
<% end %>
</div>
<% end %>
答案 0 :(得分:1)
您的嵌套表格应为:organization_types
:
<%= f.fields_for :organization_types do |builder| %>
<%= builder.select :org_type, options_for_select(OrganizationType::ORG_TYPES) %><br/>
<% end %>
您发现表单未显示复数organization_types
的原因是,如果用户还没有organization_types
,则Rails不会在表单中呈现嵌套属性。我会查看nested forms第9.2节中非常有用的Rails指南。引用该源,该源使用has_many
地址和accepts_nested_attributes_for
地址的Person对象的示例:
当关联接受嵌套属性时,fields_for呈现它 为关联的每个元素阻止一次。特别是,如果一个 人没有地址也没什么。 一种常见的模式是控制器构建一个或多个空 子项,以便向用户显示至少一组字段。该 下面的示例将导致呈现2组地址字段 在新的人形式......
指南中的示例,适用于您的控制器:
def new
@user = User.new
2.times { @user.organization_types.build}
end
看看是否有帮助...