如何在 ember-cli-mirage 中创建对象?

Posted

技术标签:

【中文标题】如何在 ember-cli-mirage 中创建对象?【英文标题】:How to create a object in ember-cli-mirage? 【发布时间】:2020-01-23 04:34:36 【问题描述】:

我有一个foo 模型,它有许多barbar 属于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| bar.baz.someAttributeName /每个```

以上是关于如何在 ember-cli-mirage 中创建对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ActiveRecords 中创建对 Ruby 中对象的引用?

如何在数据库项目中创建对动态数据库名称的引用?

在领域中创建对对象的引用的正确方法

在Firestore中创建对Cloud Storage文档的引用

在 C++ 中创建对三元运算符结果的 const 引用是不是安全?

无法在 XAML 中创建对其他项目的 xmlns 引用