Ruby on rails 4 使用Rails 4强参数处理嵌套表单的干式方法

Ruby on rails 4 使用Rails 4强参数处理嵌套表单的干式方法,ruby-on-rails-4,nested-attributes,strong-parameters,Ruby On Rails 4,Nested Attributes,Strong Parameters,在使用Rails 4强参数时,我一直在努力寻找处理嵌套表单的正确而干燥的方法 我有一些模型,可以在我的应用程序中以不同的方式重新利用,因此我有一些嵌套表单 问题是,当我使用嵌套表单时,我不觉得我在使用最干燥的方法 请考虑AccountsController中的以下内容: params.require(:account).permit( person_attributes: [ :name, address: [ :city ] ] ) 从我的角度来看

在使用Rails 4强参数时,我一直在努力寻找处理嵌套表单的正确而干燥的方法

我有一些模型,可以在我的应用程序中以不同的方式重新利用,因此我有一些嵌套表单

问题是,当我使用嵌套表单时,我不觉得我在使用最干燥的方法

请考虑
AccountsController中的以下内容:

params.require(:account).permit(
  person_attributes: [
    :name,
    address: [
      :city
    ]
  ]
)
从我的角度来看,
person\u属性不应该在
accountscocontroller
中设置。 我的意思是,AccountsController不应该对
Person
类了解那么多

我曾想过向
PeopleController
添加这样的允许属性,但这将是一个无法直接访问的私有方法

现在我正在考虑将person的允许属性存储在类方法person.allowed_attributes中,但我不确定这是否是一个明智的设计决策。 这样我就可以在几个地方使用它。 显然,我会为每个控制器编写单独的测试

我理解参数过滤应该在控制器中完成,而不是在模型中,但我不确定添加代码复制是否是一个好的折衷方案


你们对此有何看法?我认为你们做得对。这是明确地做了这样的方式在美国。顺便说一下,AccountController中与人员相关的允许参数不必与PeopleController中的参数相同

也可以对嵌套参数使用“允许”,例如:

此声明列出了姓名、电子邮件和好友属性。 预计电子邮件将是一个允许的标量数组 值,并且朋友将是具有特定 属性:它们应该具有名称属性(任何允许的标量) 允许值),作为允许标量数组的属性 值和限制为具有名称的族属性 (此处也允许任何允许的标量值)

params.permit(:name, { emails: [] },
              friends: [ :name,
                         { family: [ :name ], hobbies: [] }])