emberfire icon indicating copy to clipboard operation
emberfire copied to clipboard

Embedded hasMany not saving

Open jembezmamy opened this issue 10 years ago • 13 comments

My hasMany relationship doesn't get saved when I use embedded records.

// app/models/schedule.js
import DS from 'ember-data';

export default DS.Model.extend({
  interval:     DS.attr("number", {defaultValue: 1}),
  duties:       DS.hasMany('duty', { async: false })
});
// app/serializers/schedule.js
import FirebaseSerializer from 'emberfire/serializers/firebase';

export default FirebaseSerializer.extend({
  attrs: {
    duties: { embedded: 'always' }
  }
});

Then I run in console:

schedule = store.createRecord("schedule");
schedule.get("duties").createRecord();
schedule.save();

Then I get in firebase:

{
  "duties" : {
    "-K8JihEkTfYlEmIWGlTS" : {
      "schedule" : "-K8JidJrYtqLkLDP1k14"
    }
  },
  "schedules" : {
    "-K8JidJrYtqLkLDP1k14" : {
      "interval": 1
    }
  }
}

So as can you see, duty record is created and even assigned to the schedule, but schedule record has no duties assigned... Then, when I try to load this schedule in Ember, it also has no duties. Am I doing something wrong?

I use ember 2.1.0, ember-data 2.1.0 and ember-fire 1.6.3.

jembezmamy avatar Jan 18 '16 12:01 jembezmamy

it looks like you are doing everything correctly. I wonder if it's related to the inverse relationship. Can you remove duty's link back to the interval and see if that fixes it?

Otherwise, I'd like to get a minimal example so I can debug into it.

tstirrat avatar Jan 21 '16 20:01 tstirrat

It works! Great. But to be frank I need this inverse... Is there any workaround for this situation?

jembezmamy avatar Jan 21 '16 21:01 jembezmamy

Thanks for reporting back. It was a total guess... now I need to work out why this is the case...

tstirrat avatar Jan 21 '16 22:01 tstirrat

can you try the branch in #337 to see if using atomic saves + the ember-data EmbeddedRecordsMixin helps?

tstirrat avatar Jan 21 '16 22:01 tstirrat

Yes, it works! Thanks.

jembezmamy avatar Feb 01 '16 16:02 jembezmamy

Great, that branch will be EmberFire 2.0. I will make a release this week

tstirrat avatar Feb 01 '16 19:02 tstirrat

@tstirrat Great news if Emberfire 2.0 is coming this week!

AndersDJohnson avatar Feb 03 '16 03:02 AndersDJohnson

@tstirrat release on the way? :)

hussfelt avatar Feb 11 '16 13:02 hussfelt

@hussfelt if you follow the discussion in #337 you'll see that we are not planning to merge it anymore.

tstirrat avatar Feb 11 '16 19:02 tstirrat

There is more discussion on underlying ember-data bugs in #365, too

tstirrat avatar Feb 11 '16 19:02 tstirrat

@tstirrat Sorry, I hijacked this issue just to get info on a new release. :) My bad!

Thanks for a great service!

hussfelt avatar Feb 12 '16 05:02 hussfelt

No problem :smile_cat:

tstirrat avatar Feb 12 '16 17:02 tstirrat

Hi!

I know it is a very old issue, but I'm experiencing the same problem. I tried to do what @jembezmamy did (b/c he said it worked) but in my case it didn't. I'm following the instructions in the guides, and my models are:

// app/models/product.js
import DS from 'ember-data';
import { all } from 'rsvp';

export default DS.Model.extend({
  prices: DS.hasMany('price', { async: false, inverse: null }),
});
// app/serializers/product.js
import FirebaseSerializer from 'emberfire/serializers/firebase';

export default FirebaseSerializer.extend({
  attrs: {
    prices: { embedded: 'always' }
  }
});
// app/models/price.js
import DS from 'ember-data';
export default DS.Model.extend({
  // product: DS.belongsTo('product', {inverse: 'prices'})
});

Any idea or suggestion?

I use Ember 3.5.1, Ember Data 3.5.2 and EmberFire 2.0.10

bhernez avatar Jan 27 '19 04:01 bhernez