Skip to content

Instantly share code, notes, and snippets.

@tsubik
Created January 21, 2017 13:38
Show Gist options
  • Save tsubik/a59a780569e93a361f11bf5190760f02 to your computer and use it in GitHub Desktop.
Save tsubik/a59a780569e93a361f11bf5190760f02 to your computer and use it in GitHub Desktop.
EF hasmany bug
import FirebaseAdapter from 'emberfire/adapters/firebase';
export default FirebaseAdapter.extend({
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions: {
resetDatabase() {
this.store.findAll("event").then((events) => {
return RSVP.all(events.invoke("destroyRecord"));
}).then(() => {
const users = [
this.store.createRecord("user", { name: "Tomasz" }),
this.store.createRecord("user", { name: "Magda" }),
this.store.createRecord("user", { name: "Maciej" }),
];
const expenses = [
this.store.createRecord("expense", {
name: "Test expense",
participants: users
})
];
const event = this.store.createRecord("event", {
name: "New Test event",
users,
expenses
});
event.save().then(() => this.refresh());
});
},
remove(expense, participant) {
const event = expense.get("event");
expense.get("participants").removeObject(participant);
event.save();
}
}
});
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { hasMany } from "ember-data/relationships";
export default Model.extend({
name: attr("string"),
expenses: hasMany("expense", { async: false }),
users: hasMany("user", { async: false })
});
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { belongsTo, hasMany } from "ember-data/relationships";
export default Model.extend({
name: attr("string"),
event: belongsTo("event", { async: false }),
participants: hasMany("user", { async: false })
});
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { belongsTo } from "ember-data/relationships";
export default Model.extend({
name: attr("string"),
event: belongsTo("event")
});
import Ember from "ember";
const { RSVP } = Ember;
export default Ember.Route.extend({
model() {
return this.store.findAll("event").then((events) => events.get("firstObject"));
}
});
import FirebaseSerializer from "emberfire/serializers/firebase";
export default FirebaseSerializer.extend({
attrs: {
users: { embedded: "always" },
expenses: { embedded: "always" },
}
});
<h2 id="title">Welcome to Ember</h2>
<button {{action "resetDatabase"}}>
Reset database
</button>
Dupa
{{#if model}}
<div>
<h2>Event {{model.name}}</h2>
<h3>Expenses</h3>
{{#each model.expenses as |expense|}}
<div>
<h4>Expense: {{expense.name}}</h4>
<ul>
{{#each expense.participants as |participant|}}
<li>{{participant.name}} <button {{action "remove" expense participant}}>Remove</button></li>
{{/each}}
</ul>
</div>
{{/each}}
</div>
{{/if}}
{{outlet}}
{
"version": "0.11.0",
"EmberENV": {
"FEATURES": {}
},
"ENV": {
"firebase": {
"apiKey": "AIzaSyB4hsjvrh72fqjZrqpFi1RNpryWr1e3QUI",
"databaseURL": "https://ef-embedded-child-hasmany-bug.firebaseio.com"
}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.10.2",
"ember-data": "2.11.0",
"ember-template-compiler": "2.10.2",
"ember-testing": "2.10.2"
},
"addons": {
"emberfire": "2.0.5"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment