我有以下型号的
订单
class Order < ApplicationRecord
has_many :items
accepts_nested_attributes_for :items
end
和项目
class Item < ApplicationRecord
belongs_to :order
end
我有下面的Json来解析订单中包含多个项目的
{
"location": "takeAway",
"status": "preparing",
"items": [
{
"id":2,
"name": "coffee",
"quantity": 1,
"milk": "whole",
"size": "small"
}
]
}
我的控制器有以下代码。
params.require(:order).permit(:location, :status, items_attributes: [:id, :name, :quantity, :milk, :size])
为什么我无法将订单记录与项目记录一起保存?有人能帮忙吗?
我想问题是您在params中接收密钥items
,但您允许items_attributes
。您应该确保在params中收到items_attributes
,而不是items
。只有这样,它才会自动为items
记录分配属性。
因此,您的最终params哈希必须如下所示:
{
"location": "takeAway",
"status": "preparing",
"items_attributes": [
{
"id":2,
"name": "coffee",
"quantity": 1,
"milk": "whole",
"size": "small"
}
]
}
如果您想在params中保留items
密钥,那么您必须在控制器中自己构建Item
对象。