Ember-CLI-Mirage throws error when defining relationship in Mirage Model


#1

Hi there,

I would be really happy if someone could fix this problem… I already searched the Mirage issues section, google, here on ember discuss, etc.

Everything is working fine as soon as I define a relationship on a Mirage Model the console throws the following error:

All I want to do is having a relationship between 2 models: Competition and Fixture (Football related).

My related files are looking like that:

Models

// app/models/competition.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
  caption: attr('string'),
  league: attr('string'),
  year: attr('number'),
  currentMatchday: attr('number'),
  numberOfMatchdays: attr('number'),
  numberOfTeams: attr('number'),
  numberOfGames: attr('number'),
  lastUpdated: attr('date'),
  fixtures: hasMany('fixture'),
});
// app/models/fixture.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  date: attr('date'),
  status: attr('string'),
  matchday: attr('number'),
  homeTeamName: attr('string'),
  awayTeamName: attr('string'),
  competition: belongsTo('competition'),
});

// mirage/models/competition.js

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

export default Model.extend({
  fixtures: hasMany(),
});
// mirage/models/competition.js

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

export default Model.extend({
  competition: belongsTo(),
});

Fixtures

// mirage/fixtures/competitions.js

export default [
  {
    id: 1,
    caption: 'European Championships France 2016',
    league: 'EC',
    year: '2016',
    currentMatchday: 3,
    numberOfMatchdays: 7,
    numberOfTeams: 24,
    numberOfGames: 38,
    lastUpdated: '2016-06-22T04:34:39Z',
    fixtures: [1, 2],
  },
];
// mirage/fixtures/fixtures.js

export default [
  {
    id: 1,
    date: '2016-06-10T19:00:00Z',
    status: 'FINISHED',
    matchday: 1,
    homeTeamName: 'France',
    awayTeamName: 'Romania',
    competition: 1,
  },
  {
    id: 2,
    date: '2016-06-10T19:00:00Z',
    status: 'FINISHED',
    matchday: 1,
    homeTeamName: 'Italy',
    awayTeamName: 'Germany',
    competition: 1,
  },
];

Adapter

// app/adapters/application.js

import DS from 'ember-data';
import ENV from '../config/environment';

export default DS.RESTAdapter.extend({
  host: ENV.dataInterface,
  namespace: ENV.namespace,
});
// host = 'http://localhost:4200'
// namespace = 'api'

Serializers

// app/serializers/application.js

import RESTSerializer from 'ember-data/serializers/rest';

export default RESTSerializer.extend({
});
// mirage/serializers/application.js

import { RestSerializer } from 'ember-cli-mirage';

export default RestSerializer.extend({
});

If I comment out the fixtures hasMany relationship on the Mirage model, I’m not getting the error anymore, but of course I need that relationship.

I’m using the (currently) latest ember-cli-mirage version which is 0.2.1.

If you need further information, please let me know and I’ll provide you!

Thanks in advance!!! =)


#2

In the fixtures, the relationships need to be defined in terms of ids. So for
mirage/fixtures/competitions.js

...
fixtureIds: [1, 2]

and for mirage/fixtures/fixtures.js

...
competitionId: 1

I think that’s your problem. Let me know if that helps at all!


#3

Unfortunately this also doesn’t work, because by default it’s camelcased and pluralized as documented here.

But thanks for your reply :smiley:

Any other thoughts??


#4

Hmm… After some more playing around, I just removed both relationship declarations from both Mirage models and everything just works fine :joy: Oh man…