Как я могу разрешить вложенные атрибуты с активным сериализатором модели? - PullRequest
0 голосов
/ 09 мая 2019

Я использую active_model_serializers из API в ruby ​​на рельсах, и у меня есть метод контроллера, в котором я сохраняю счет и его вложенные элементы с некоторыми вычислениями, проблема в том, что после включения сериализатора,вложенные атрибуты ограничены, и я не могу получить к ним доступ.

У меня есть код таким образом, согласно некоторой документации, но он не работает

#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
        }
    ]
}

Кто-то знает, что случилось? Прежде чем включить гем сериализатора, он работал нормально.

Заранее спасибо!

1 Ответ

1 голос
/ 10 мая 2019

изменить

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
        }
    ]
}
...