如何在 ember-cli-mirage 中创建对象?
Posted
技术标签:
【中文标题】如何在 ember-cli-mirage 中创建对象?【英文标题】:How to create a object in ember-cli-mirage? 【发布时间】:2020-01-23 04:34:36 【问题描述】:我有一个foo
模型,它有许多bar
和bar
属于baz
。当foo
与其bar
一起创建时,如何包含baz
的创建?每当创建 foo
时,必须创建 10 个 bar
,并为每个 bar
创建一个 baz
在我的/factories/foo.js
我有一个
afterCreate(foo, server)
server.createList('bar', 10, foo );
【问题讨论】:
【参考方案1】:一种选择是让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 指南! :)
【讨论】:
嗨,Sam,谢谢你的详细回答,这对我很有帮助。我尝试了您给我的最后信息的特征功能,但我无法将其显示给模板。 ``` model(params) return this.store.findRecord('foo', params.foo_id, include: 'bars'); ``` 在我的 /template.hbs 上 ``` #each model.bars as |bar|以上是关于如何在 ember-cli-mirage 中创建对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ActiveRecords 中创建对 Ruby 中对象的引用?
在Firestore中创建对Cloud Storage文档的引用