记录数组的强大参数

问题描述 投票:1回答:2

强大的参数让我非常困惑。我正在写一个表格,一次创建多个记录。它们以参数的形式作为属性数组传递:

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

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

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

但是我在使用ForbiddenAttributeErrors形式的强参数时遇到了很多麻烦。我尝试使用appointment_params和白名单属性,但是没有运气。我找不到适合我的用例的任何文档。他们都假定记录的数组应该嵌套在一些所有者记录的下面,但是这里不是这种情况。

任何帮助将不胜感激。

ruby-on-rails strong-parameters
2个回答
3
投票

除了确保实际的模型属性外,还要确保将阵列白名单列出。

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

类似这样的方法应该起作用:

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

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

不确定其余的yoru代码到底是什么样,但是似乎您不允许使用数组本身,以上代码示例尝试将我认为该属性可能被命名的内容列入白名单。


2
投票

如果仅使用属性来创建新的Appointment记录,则可以使用以下内容

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

如果您真的想遍历数组,可以这样做

params[:appointments].each do |a|
  app = Appointment.create!(a.permit(:field1, :field2))
end
© www.soinside.com 2019 - 2024. All rights reserved.