我在我编写的一些自定义序列化程序代码中看到了一些奇怪的行为。
我在一个资产模型中有一个名为'marketName‘的字段。我的Rails后端希望这个字段被命名为'market_name‘。我已经扩展了ActiveModelSerializer并覆盖了'extractSingle‘和'serialize’方法。
奇怪的是,对于我的Asset模型中不是由多个单词组成的所有其他字段,我编写的序列化代码工作得很好。没有问题。然而,对于任何包含多个单词的字段,序列化不能完全工作,因为它在创建时保存资产-它不能正确地填充资产模型的'marketName‘字段(以及由多个单词组成的任何其他字段)。
例如,如果我检查数据检查器中的'marketName‘字段,它显示为'{}’。如果我将我的资产模型中任何多字字段的名称改为单数(也就是将'marketName‘改为' name '),并相应地更新序列化代码-一切都很好。
知道是怎么回事吗?
谢谢,戴夫
发布于 2014-08-21 23:34:14
在核心团队(参见line 126,下面的incase链接对未来的读者不好)所做的extractSingle()测试中,他们将变量作为super_villains传递,然后ActiveModelSerializer中包含的normalize()为他们将其更改为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");
}));
});https://stackoverflow.com/questions/25413379
复制相似问题