如何允许活动模型序列化器使用嵌套属性?

How Can I permit nested attributes with active model serializer?

我在 rails 上的 ruby 中使用 api 中的 active_model_serializers,并且我有一个控制器方法,可以在其中保存发票及其嵌套项目经过一些计算,问题是在包含序列化程序之后,嵌套属性受到限制,我无法访问它们。

根据一些文档,我有这样的代码,但它不起作用

#Controller

 def invoice_params
        params.require(:invoice).permit(:person_id, :date, sales_attributes: [:reference_id, :quantity, :price])
 end

#Model

class Invoice < ApplicationRecord
    belongs_to :person
    has_many :sales
    accepts_nested_attributes_for :sales, allow_destroy: true
end

#Serializer

class InvoiceSerializer < ActiveModel::Serializer
    attributes :id, :date, :total, :profit, :consecutive, :person_id
    has_many :sales, root: :sales_attributes
    belongs_to :person
end

我发送的 json 请求是:

{
    "person_id": 4,
    "date": "2019-03-20",
    "sales": [
        {
            "reference_id":1,
            "quantity": 90000,
            "price": 240
        },
        {
            "reference_id":1,
            "quantity": 50000,
            "price": 240
        }
    ]
}

有人知道会发生什么吗?在包含序列化程序之前 gem 它工作正常。

提前致谢!

改变

def invoice_params
        params.require(:invoice).permit(:person_id, :date, sales_attributes: [:reference_id, :quantity, :price])
 end

def invoice_params
        params.require(:invoice).permit(:person_id, :date, sales_attributes: [:id, :reference_id, :quantity, :price])
 end

{
    "person_id": 4,
    "date": "2019-03-20",
    "sales": [
        {
            "reference_id":1,
            "quantity": 90000,
            "price": 240
        },
        {
            "reference_id":1,
            "quantity": 50000,
            "price": 240
        }
    ]
}

{
    "person_id": 4,
    "date": "2019-03-20",
    "sales_attributes": [
        {
            "reference_id":1,
            "quantity": 90000,
            "price": 240
        },
        {
            "reference_id":1,
            "quantity": 50000,
            "price": 240
        }
    ]
}