强大的参数让我非常困惑。我正在写一个表格,一次创建多个记录。它们以参数的形式作为属性数组传递:
{ :appointments => [ { :field1 => 'value1'
, :field2 => 'value2'
}
, # next record
]
}
然后在控制器中我想做类似的事情
params[:appointments].each do |a|
app = Appointment.create! a
end
但是我在使用ForbiddenAttributeErrors形式的强参数时遇到了很多麻烦。我尝试使用appointment_params
和白名单属性,但是没有运气。我找不到适合我的用例的任何文档。他们都假定记录的数组应该嵌套在一些所有者记录的下面,但是这里不是这种情况。
任何帮助将不胜感激。
除了确保实际的模型属性外,还要确保将阵列白名单列出。
[当您更改控制器以一次处理params.require
数组而不是一次约会时,似乎使用了appointments
方法的脚手架版本,但尚未更新该方法。
类似这样的方法应该起作用:
params.require(:appointment).permit(:field1, :field2, appointments: [:field1, field2])
或
params.require(:appointments).permit(:field1, :field2)
不确定其余的yoru代码到底是什么样,但是似乎您不允许使用数组本身,以上代码示例尝试将我认为该属性可能被命名的内容列入白名单。
如果仅使用属性来创建新的Appointment
记录,则可以使用以下内容
Appointment.create!(params.permit(applications: [:field1, :field2])[:applications])
如果您真的想遍历数组,可以这样做
params[:appointments].each do |a|
app = Appointment.create!(a.permit(:field1, :field2))
end