0

在 ember-cli-mirage 中生成 StaffMember 的实例时,我试图创建一个“任务”并将其分配给 StaffMember 模型中的键“tasksCreated”。我当前的代码如下;

它正在创建一个任务,并创建一个 StaffMember,但两者之间没有建立任何关系。

应用程序/模型/staff-member.js

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr('string'),
    atWork: DS.attr('boolean'),
    avatar: DS.attr(),
    tasksCreated: DS.hasMany('task', {
        inverse: 'creator'
    }),
    tasksAssigned: DS.hasMany('task', {
        inverse: 'assignee'
    })
});

应用程序/模型/tasks.js

import DS from 'ember-data';

export default DS.Model.extend({
    creator: DS.belongsTo('staff-member', { inverse: null }),
    assignee: DS.belongsTo('staff-member', { inverse: null }),
    creationDate: DS.attr(),
    description: DS.attr('string'),
    urgency: DS.attr()
 });

海市蜃楼/模型/staff-member.js

import {Model, hasMany} from 'ember-cli-mirage';

export default Model.extend({
    tasksCreated: hasMany('task'),
    tasksAssigned: hasMany('task', { inverse: 'assignee'})
});

海市蜃楼/模型/task.js

import {Model, belongsTo} from 'ember-cli-mirage';

export default Model.extend({
    creator: belongsTo('staff-member'),
    assignee: belongsTo('staff-member')
});

海市蜃楼/工厂/staff-member.js

import { Factory, faker, trait } from 'ember-cli-mirage';

export default Factory.extend({
    name: faker.name.firstName,
    atWork: faker.random.boolean,
    avatar: faker.image.avatar,
    withTasks: trait({
        afterCreate(staffMember, server){
            server.createList('task',2,{tasksCreated: [staffMember]});
        }
    })
});

海市蜃楼/工厂/task.js

import { Factory, faker } from 'ember-cli-mirage';

export default Factory.extend({
    creationDate: faker.date.recent,
    description: faker.lorem.sentence,
    urgency: faker.random.number({
        'min': 0,
        'max': 4
    })
});

海市蜃楼/场景/default.js

export default function(server ) {  

    server.createList('staff-member', 4, 'withTasks');

}
4

1 回答 1

0

我试图删除大部分与设置关系没有直接关系的代码。在摆弄工厂之前,请尝试让关系仅在默认情况下工作。

我在这里做了一个工作:https ://ember-twiddle.com/5bcdcdee50faa0c0a679c3c4d35fe0ea?openFiles=mirage.scenarios.default.js%2C

这是默认场景的样子:

export default function(server ) {  

  let member1 = server.create('staff-member');
  server.createList('task', 2, { creator: member1 });
  server.create('task', { assignee: member1 });


  let member2 = server.create('staff-member');
  server.create('task', { creator: member2 });
  server.createList('task', 3, { assignee: member2 });
}

就您的工厂afterCreate代码而言,这一行有一个错误

server.createList('task',2,{tasksCreated: [staffMember]});

您正在创建一个task, 但tasksCreated作为该任务的属性传入。但是任务没有 tasksCreated 属性,staffMembers 有。也许你正在寻找这样的东西:

server.createList('task', 2, { creator: staffMember });
于 2016-10-01T14:58:13.557 回答