如何在 ember-cli-mirage 中创建对象?
How to create a object in ember-cli-mirage?
我有一个 foo
模型,它有许多 bar
和 bar
属于 baz
。当 foo
与其 bar
一起创建时,如何包含 baz
的创建?每当创建一个 foo
时,必须创建 10 个 bar
并且为每个 bar
创建一个 baz
在我的 /factories/foo.js
我有一个
afterCreate(foo, server) {
server.createList('bar', 10, { foo });
}
一种选择是让 bar
工厂创建自己的 baz
:
// factories/bar.js
export default Factory.extend({
afterCreate(bar, server) {
bar.update({
baz: server.create('baz')
})
}
})
这样,每次调用 server.create('bar')
时(无论在何处),每个柱都会更新为自己的 baz
。
您甚至可以使用 the association helper 来为您完成这项工作——它基本上负责在创建基础模型时创建 belongsTo
关系的这种特殊情况:
import { Factory, association } from 'ember-cli-mirage';
// factories/bar.js
export default Factory.extend({
baz: association()
})
您也可以直接从 foo
工厂进行:
// factories/foo.js
afterCreate(foo, server) {
server.createList('bar', 10, { foo }).forEach(bar => {
bar.update({
baz: server.create('baz')
})
});
}
请注意,基础工厂应该是模型的最小有效描述 + 它们之间的关系——如果你将这些自动创建的关系放在每个基础工厂中,然后有人想为这些关系 不存在,对他们来说很难。 traits feature 是专门为缓解这种情况而设计的:
// factories/bar.js
Factory.extend({
withBaz: trait({
baz: association()
})
})
// factories/foo.js
Factory.extend({
afterCreate(foo, server) {
server.createList('bar', 10, 'withBaz', { foo });
}
})
另请务必阅读 factory best practices 指南! :)
我有一个 foo
模型,它有许多 bar
和 bar
属于 baz
。当 foo
与其 bar
一起创建时,如何包含 baz
的创建?每当创建一个 foo
时,必须创建 10 个 bar
并且为每个 bar
baz
在我的 /factories/foo.js
我有一个
afterCreate(foo, server) {
server.createList('bar', 10, { foo });
}
一种选择是让 bar
工厂创建自己的 baz
:
// factories/bar.js
export default Factory.extend({
afterCreate(bar, server) {
bar.update({
baz: server.create('baz')
})
}
})
这样,每次调用 server.create('bar')
时(无论在何处),每个柱都会更新为自己的 baz
。
您甚至可以使用 the association helper 来为您完成这项工作——它基本上负责在创建基础模型时创建 belongsTo
关系的这种特殊情况:
import { Factory, association } from 'ember-cli-mirage';
// factories/bar.js
export default Factory.extend({
baz: association()
})
您也可以直接从 foo
工厂进行:
// factories/foo.js
afterCreate(foo, server) {
server.createList('bar', 10, { foo }).forEach(bar => {
bar.update({
baz: server.create('baz')
})
});
}
请注意,基础工厂应该是模型的最小有效描述 + 它们之间的关系——如果你将这些自动创建的关系放在每个基础工厂中,然后有人想为这些关系 不存在,对他们来说很难。 traits feature 是专门为缓解这种情况而设计的:
// factories/bar.js
Factory.extend({
withBaz: trait({
baz: association()
})
})
// factories/foo.js
Factory.extend({
afterCreate(foo, server) {
server.createList('bar', 10, 'withBaz', { foo });
}
})
另请务必阅读 factory best practices 指南! :)