I'm trying to fetch data (following a tutorial) via RESTAdapter and I'm getting an error I don't understand.
"Error while processing route: players.index" "factory is undefined" "Store<.modelFor@http://localhost:4200/assets/vendor.js:74981:1
Anyone idea of what I'm missing? Do I need install an add-on?
routes/players/index.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return this.store.find('player');
}
});
models/player.js
import DS from 'ember-data';
export default DS.Model.extend({
finalScore: DS.attr('number'),
name: DS.attr('string'),
heightFormatted: DS.attr('string'),
heightCm: DS.attr('number'),
weightLb: DS.attr('number'),
weightKg: DS.attr('string'),
birthplace: DS.attr('string'),
birthdate: DS.attr('string'),
neoId: DS.attr('number'),
position: DS.attr('string'),
number: DS.attr('string'),
faults: DS.attr('number'),
stats: DS.belongsTo('stat')
});
models/stat.js
import DS from 'ember-data';
export default DS.Model.extend({
points: DS.attr('number'),
assits: DS.attr('number'),
defr: DS.attr('number'),
ofr: DS.attr('number'),
steals: DS.attr('number'),
blocks: DS.attr('number'),
turnovers: DS.attr('number'),
fta: DS.attr('number'),
ftm: DS.attr('number'),
fga: DS.attr('number'),
fgm: DS.attr('number'),
lsa: DS.attr('number'),
lsm: DS.attr('number'),
minutes: DS.attr('number'),
isStarter: DS.attr('boolean'),
gamesPlayed: DS.attr('number'),
player: DS.belongsTo('player')
});
adapters/application.js
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
host: 'http://localhost:3000',
namespace: 'api'
});
JSON
{
"players": [
{
"neo_id": 3264,
"name": "Jeff Green",
"height_cm": 205,
"height_formatted": "6'9\"",
"weight_lb": 235,
"weight_kg": "106.8",
"position": "PF",
"number": "8",
"birthplace": "Cheverly, Maryland, USA",
"birthdate": "523843200",
"stats": {
"final_score": 344,
"games_played": 16,
"minutes": 34.5,
"points": 19,
"assits": 1.75,
"defr": 3.75,
"ofr": 1,
"steals": 0.94,
"blocks": 0.69,
"turnovers": 1.56,
"faults": 1.94,
"neo_id": 3264
}
},
{
"neo_id": 3265,
"name": "Erik Murphy",
"height_cm": 208,
"height_formatted": "6'10\"",
"weight_lb": 230,
"weight_kg": "104.6",
"position": "PF",
"number": "-1",
"birthplace": "Lyon, France",
"birthdate": "656899200",
"stats": {}
}
]
}
I wasn't able to reproduce your exact error, but working with what you shared I was able to get it to work by making these changes. If there is something different with your code leave a comment and I will take a look.
serializers/application.js
Since you are using a custom primary key (neo_id instead of id) you can change that here, as well as indicate that the stats
records are embedded in the players
data:
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs : {
stats: { embedded: 'always' }
},
primaryKey : 'neo_id'
});