我看到了一些我编写的自定义序列化代码的奇怪行为。
我在资产模型中有一个名为' marketName'的字段。我的Rails后端希望将该字段称为' market_name'。我已经扩展了ActiveModelSerializer,并覆盖了' extractSingle'并且'序列化'方法。
奇怪之处在于 - 对于我的Asset模型中的所有其他字段,这些字段不是由多个单词组成的 - 我编写的序列化代码效果很好。没有问题。但是 - 对于包含多个单词的任何字段 - 序列化并不完全有效,因为它在创建时保存了资产 - 它没有正确填充资产模型的市场名称&# 39;字段(以及由多个单词组成的任何其他字段)。
例如,如果我检查' marketName'数据检查器中的字段显示为' {}'。如果我将我的资产模型中任何多字词字段的名称更改为单数(即更改' marketName'到' name')并相应地更新序列化代码 - everthing效果很好。
知道发生了什么事吗?
由于 戴夫
答案 0 :(得分:0)
在extractSingle()
的测试中,核心团队(请参阅line 126,也显示以下incase链接对未来读者不利)确实如此,他们将变量传递为super_villains
,然后之后,normalize()
中包含的ActiveModelSerializer
会将其更改为superVillains
。
所以我认为在你的extractSingle中假设值还没有camelCase,但仍然是underscore_format(例如,“market_name”),你应该是金色的!
test("extractSingle", function() {
env.container.register('adapter:superVillain', DS.ActiveModelAdapter);
var json_hash = {
home_planet: {id: "1", name: "Umber", super_villain_ids: [1]},
super_villains: [{
id: "1",
first_name: "Tom",
last_name: "Dale",
home_planet_id: "1"
}]
};
var json = env.amsSerializer.extractSingle(env.store, HomePlanet, json_hash);
deepEqual(json, {
"id": "1",
"name": "Umber",
"superVillains": [1]
});
env.store.find("superVillain", 1).then(async(function(minion){
equal(minion.get('firstName'), "Tom");
}));
});