记录数组的强参数

时间:2015-01-21 11:27:34

标签: ruby-on-rails strong-parameters

强参数让我非常困惑。我正在写一个表格,一次创建几个记录。它们作为一系列属性传递给参数:

{ :appointments => [ { :field1 => 'value1'
                     , :field2 => 'value2'
                     }
                   , # next record
                   ]
}

然后在控制器中我想做类似

的事情
params[:appointments].each do |a|
    app = Appointment.create! a
end

但是我遇到了强大的参数,以ForbiddenAttributeErrors的形式遇到了很多麻烦。我尝试过使用appointment_params和白名单属性,但没有运气。我找不到符合我用例的好文档。他们都假设记录数组应嵌套在某些所有者记录之下,但这不是这种情况。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

除了实际的模型属性外,还要确保列出数组。

您似乎使用了params.require方法的脚手架版本,并且当您更改控制器以处理appointments数组而不是一次约会时,没有更新该方法。

这样的事情应该有效:

params.require(:appointment).permit(:field1, :field2, appointments: [:field1, field2])

params.require(:appointments).permit(:field1, :field2)

不确定yoru代码的其余部分是什么样子,但似乎你不允许数组本身,上面的代码示例试图列出我认为属性可能被命名的白名单。

答案 1 :(得分:1)

如果您只使用属性创建新的Appointment记录,则可以使用以下

Appointment.create!(params.permit(applications: [:field1, :field2])[:applications])

如果你真的想迭代数组,你可以做

params[:appointments].each do |a|
  app = Appointment.create!(a.permit(:field1, :field2))
end