【问题标题】:Rails Active Model Serializer - Adding nested attributes to 2nd level modelRails Active Model Serializer - 将嵌套属性添加到 2 级模型
【发布时间】:2017-06-29 15:55:31
【问题描述】:

我有三个模型,即 InvoiceInvoiceDetailProductInvoice 有很多 InvoiceDetailsInvoiceDetails 属于 Invoice 和 Product

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

发票模型:

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

InvoiceDetai 模型

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

【问题讨论】:

  • productinvoice_detail 之间没有关联,这可能是原因。
  • 它们之间有关联,invoice_detail 属于产品,属于invoice
  • 这还不够!我建议你阅读关联!
  • 我没明白你的意思,这个关联怎么不够?
  • 我确实尝试过将 has_many invoiceDetails 添加到产品模型中。它也没有帮助

标签: ruby-on-rails ruby-on-rails-5 activemodel active-model-serializers


【解决方案1】:

AMS 不包括关联的关联 - 它仅深入 1 级。有办法解决这个问题:

  • 在您的控制器中使用include (docs)
  • 使用像 this one 这样的解决方法 - 我目前在生产中成功使用它

【讨论】:

    【解决方案2】:

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

    ActiveModelSerializers.config.default_includes = '**'
    

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多