FirebaseExtended/emberfire

FirestoreAdapter Error while processing route: index the adapter could not find the resource

Opened this issue · 2 comments

Version info

e.g.
DEBUG: -------------------------------
DEBUG: Ember      : 3.19
DEBUG: Ember Data : 3.19
DEBUG: Firebase   : 7.16.0
DEBUG: EmberFire  : 3.0.0-rc.6
DEBUG: jQuery     : 3.5.1
DEBUG: -------------------------------

Description

I am building an application that uses subcollections, and I received the error given in the title when trying to use store.findRecord(). A generic form of my application is someone having a catalog of albums and the songs on each album with the following structure:

users/{userId}/albums/{albumId}
              /songs/{songId}

The document userId has no fields, only the two subcollections. The album document has fields with related information, including a field for the uid generated by Firebase. The song document is very similar, with the addition of a albumId field to indicate which album the song is on, creating a one-to-many relationship between an album and various songs. I use the following models for the user, album, and song:

User Model

import Model, { hasMany } from '@ember-data/model';

export default class UsersModel extends Model {
  @hasMany('albums', { subcollection: true }) albums;
  @hasMany('songs', { subcollection: true }) songs;
}

Album Model

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

export default class AlbumsModel extends Model {
  @belongsTo('users') user;
  
  @attr('string') id;
  @attr('string') name;
  @attr('string') yearOfRelease;
  @attr('string') artist;
  @attr('string') label;
}

Song Model

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

export default class SongsModel extends Model {
  @belongsTo('users') user;
  
  @attr('string') albumId;
  @attr('string') id;
  @attr('string') title;
  @attr('string') length;
}

I am attempting to create a page at index that will show the albums the user has in their library after authenticating. I use this route to try and make that query:

app/routes/index.js

import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

import firebase from 'firebase/app';

export default class IndexRoute extends Route {
  @service session;
  @service firebaseApp;
  
  //async model() {}
  model() {
    return this.store.findRecord('users', this.session.data.authenticated.user.uid);
  }
}

and use this template to see if data is coming through:

app/templates/index.hbs

<h1 class="text-center mt-2">Albums</h1>

{{#each @model.albums as |album|}}
  <h2>{{album.name}}</h2>
{{/each}}

When I run ember serve to try and view the data, I get the error "Error while processing route: index the adapter could not find the resource". I based this structure off of the example app given in the repository, which has a relatively similar structure. Since I cannot see the underlying Firestore structure, however, it very well could be an issue in my setup.

Steps to reproduce

  1. Create a Firestore database with a content-owner structure as specified in my description above
  2. Create create the above models, route, etc.
  3. Serve the program

Expected behavior

To see a list of the album names

Actual behavior

An error with the adapter not being able to find the resources.

hey @BladeFrisch , have you checked out: #614 ?
just try @charlesfries's patch if you're using the Firestore serializer,
( or @zoltan-nz's code for the older RealtimeDatabaseSerializer )

it got me going again!

Thank you for the info, but we ended up re-writing the app in Angular. We needed something quickly. I will check this out for future projects though!