【问题标题】:DRY way of handling nested forms with Rails 4 strong parameters使用 Rails 4 强参数处理嵌套表单的 DRY 方式
【发布时间】:2014-03-17 01:02:33
【问题描述】:

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

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

问题是当我使用嵌套表单时,我不觉得我在使用 DRYest 方法。

考虑以下是AccountsController:

params.require(:account).permit(
  person_attributes: [
    :name,
    address: [
      :city
    ]
  ]
)

从我的角度来看,person_attributes 不应该设置在 AccountsController 中。 我的意思是,AccountsController 不应该对Person 类了解那么多。

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

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

我知道参数过滤应该在控制器中完成,而不是在模型中,但我不确定添加代码重复是否是一个好的权衡。

你们对此有何看法?

【问题讨论】:

    标签: ruby-on-rails-4 nested-attributes strong-parameters


    【解决方案1】:

    我认为你做得对。在Rails guide (4.5.2) 中明确地这样做了。顺便说一下,AccountController 中有关人员的允许参数不必与 PeopleController 中的相同。

    您还可以对嵌套参数使用 permit,例如:

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

    此声明将姓名、电子邮件和朋友属性列入白名单。 预计电子邮件将是一组允许的标量 值,并且该朋友将是具有特定资源的数组 属性:它们应该有一个名称属性(任何允许的标量 values allowed),一个爱好属性,作为一个允许的标量数组 值,以及限制为具有名称的家庭属性 (此处也允许任何允许的标量值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多