来自关联的活动模型序列化程序数据属性未加载 [英] Active Model Serializers data attributes from associations are not loading

查看:50
本文介绍了来自关联的活动模型序列化程序数据属性未加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试按如下方式加载关联:

I am trying to load the association as follows:

这是我的控制器,它试图呈现 json.

This is my controller which is trying to render the json.

#app/controllers/store/products_controller.rb
  def customize
    @option_types = OptionType.all
    respond_to do |format|
      format.json { render :json => @option_types}
    end
  end

这是上述对象的序列化器

This is the serializer for above object

#app/serializers/option_type_serializer.rb
class OptionTypeSerializer < ActiveModel::Serializer
  attributes :id, :key, :customizable, :name
  has_many :option_values
end

option_value belong_to option_type

option_value belong_to option_type

#app/serializers/option_value_serializer.rb
class OptionValueSerializer < ActiveModel::Serializer
  attributes :id, :key, :option_type_id, :percentage_price_impact, :fixed_price_impact, :absolute_price_impact, :name
end

这将生成以下 JSON.尽管在 option_value_serializer.rb 中指定了许多其他参数,但在生成的 JSON 中只出现了 id 和 type

This is generating the following JSON. Although a number of other params are specified in the option_value_serializer.rb, only id and type appear in the generated JSON

// http://0.0.0.0:3000/products/810/customize.json
{
  "data": [
    {
      "id": "1",
      "type": "option-types",
      "attributes": {
        "key": "fabric",
        "customizable": true,
        "name": "FABRIC"
      },
      "relationships": {
        "option-values": {
          "data": [
            {
              "id": "1",
              "type": "option-values"
            },
            {
              "id": "2",
              "type": "option-values"
            }
          ]
        }
      }
    },
    {
      "id": "2",
      "type": "option-types",
      "attributes": {
        "key": "cuff-type",
        "customizable": false,
        "name": "CUFF TYPE"
      },
      "relationships": {
        "option-values": {
          "data": [

          ]
        }
      }
    },
    {
      "id": "3",
      "type": "option-types",
      "attributes": {
        "key": "vents",
        "customizable": false,
        "name": "VENTS"
      },
      "relationships": {
        "option-values": {
          "data": [

          ]
        }
      }
    }
  ]
}

推荐答案

忘记关联,这样做:

#app/serializers/option_type_serializer.rb
class OptionTypeSerializer < ActiveModel::Serializer
  attributes :id, :key, :customizable, :name, :option_values
  # has_many :option_values

  def option_values
    object.option_values.collect do |ov|
      {
          id: ov.id,
          key: ov.key,
          option_type_id: ov.option_type_id,
          percentage_price_impact: ov.percentage_price_impact,
          fixed_price_impact: ov.fixed_price_impact,
          absolute_price_impact: ov.absolute_price_impact,
          name: ov.name,
          description: ov.description,
          image: ov.option_image
      }
    end
  end

end

这篇关于来自关联的活动模型序列化程序数据属性未加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆