强参数让我非常困惑。我正在写一个表格,一次创建几个记录。它们作为一系列属性传递给参数:
{ :appointments => [ { :field1 => 'value1'
, :field2 => 'value2'
}
, # next record
]
}
然后在控制器中我想做类似
的事情params[:appointments].each do |a|
app = Appointment.create! a
end
但是我遇到了强大的参数,以ForbiddenAttributeErrors的形式遇到了很多麻烦。我尝试过使用appointment_params
和白名单属性,但没有运气。我找不到符合我用例的好文档。他们都假设记录数组应嵌套在某些所有者记录之下,但这不是这种情况。
任何帮助都将不胜感激。
答案 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