createList 在 Mirage js 中不拾取关系

Posted

技术标签:

【中文标题】createList 在 Mirage js 中不拾取关系【英文标题】:createList does not pick up relationship in Mirage js 【发布时间】:2020-06-18 09:18:24 【问题描述】:

我正在尝试使用 Mirage js createList 工具创建属于用户的多个帖子。我已经创建了具有对应关系的模型:

  models: 
    user: Model.extend(
      posts: hasMany(),
    ),
    post: Model.extend(
      user: belongsTo()
    )
  

seeds 方法中,我试图创建一个帖子列表并使用以下代码将它们分配给用户:

  seeds(server) 

    let posts = server.createList("post", 2);

    server.create("user", 
      name: "John",
      posts: [posts],
    );

  

不幸的是,当我在 http 请求中点击 this.get("/users"); 时,我收到一个海市蜃楼错误,我理解但无法修复: Mirage: You're trying to create a user model and you passed in "model:post(1),model:post(2)" under the posts key, but that key is a HasMany relationship. You must pass in a Collection, PolymorphicCollection, array of Models, or null.

据我所知,我正在传递一个模型数组?请问怎么解决?

【问题讨论】:

【参考方案1】:

所以问题是:

 posts: [posts]

这部分已经返回一个数组(或集合):

let posts = server.createList("post", 2);

因此将其包装在另一个数组 [post] 中是不正确的。

使用server.create("..."),我们可以通过将其放入数组来挂钩它,但server.createList 已经返回了一个数组。

正确的语法是:

  seeds(server) 

    let posts = server.createList("post", 2);

    server.create("user", 
      name: "John",
      posts: posts,
    );

  

甚至更短:

  seeds(server) 

    let posts = server.createList("post", 2);

    server.create("user", 
      name: "John",
      posts,
    );

  

【讨论】:

以上是关于createList 在 Mirage js 中不拾取关系的主要内容,如果未能解决你的问题,请参考以下文章

mirage.js 不适用于 Angular 中的子 url 路径(仅适用于根路径)

Ember.js - 将 ember-cli-mirage 用于假模型时未找到模型

如何在 Mirage js 中播种具有多态一对一关系的模型?

Ember 使用本地 JSON 文件而不是教程中提供的 Mirage

如何在emberjs中使用海市蜃楼假数据进行分页?

Mirage 的简单 Ember 数据问题(错误:遇到未定义类型的资源对象)