本文介绍了来自关联的活动模型序列化程序数据属性未加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试按如下方式加载关联:
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
这篇关于来自关联的活动模型序列化程序数据属性未加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!