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 中播种具有多态一对一关系的模型?