繁体   English   中英

Rails Active Model序列化器-将嵌套属性添加到第二级模型

[英]Rails Active Model Serializer - Adding nested attributes to 2nd level model

我有三个模型,分别是InvoiceInvoiceDetailProduct 发票具有许多InvoiceDetails,InvoiceDetails属于Invoice和Product

我分别为所有三个模型定义了序列化器,但是在获取发票时,无法获取产品属性。

发票型号:

 class Invoice < ApplicationRecord
  has_many :invoiceDetails, inverse_of: :invoice
  belongs_to :customer
  accepts_nested_attributes_for :invoiceDetails
end

发票德泰模型

 class InvoiceDetail < ApplicationRecord
  belongs_to :invoice
  belongs_to :product
end

产品型号

class Product < ApplicationRecord
  belongs_to :company
  belongs_to :category
  belongs_to :user
end

串行器

    class InvoiceSerializer < ActiveModel::Serializer
  attributes :id, :total_amount, :balance_amount, :created_at
  belongs_to :customer
  has_many :invoiceDetails
end

class InvoiceDetailSerializer < ActiveModel::Serializer
  attributes :id, :quantity, :discount, :subtotal
  belongs_to :product
end

class ProductSerializer < ActiveModel::Serializer
  attributes :id, :name, :mrp, :sp, :cp, :stocks, :isPublished
  has_one :category
end

当我提取发票时:JSON输出不包括产品属性。

[
    {
        "id": 3,
        "total_amount": 450,
        "balance_amount": 350,
        "created_at": "2017-06-27T17:02:20.000Z",
        "customer": {
            "id": 4,
            "company_id": 1,
            "name": "vivek",
            "isActive": true,
            "created_at": "2017-06-27T14:35:50.000Z",
            "updated_at": "2017-06-27T14:35:50.000Z",
            "mobile": 12345678,
            "address": "test",
            "pan_number": null,
            "tin_number": null,
            "party_name": "xyz"
        },
        "invoiceDetails": [
            {
                "id": 4,
                "quantity": 1,
                "discount": 0,
                "subtotal": 150
            },
            {
                "id": 5,
                "quantity": 1,
                "discount": 0,
                "subtotal": 300
            }
        ]
    }
]

AMS不包括关联的关联-仅深入1级。 可以通过以下方法解决:

  • 在控制器中使用includedocs
  • 使用变通像这一个 -我目前使用它成功地在生产中

您可以添加以下初始化程序以启用递归关联。 但是,您需要确保没有循环引用。

ActiveModelSerializers.config.default_includes = '**'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM