Ember-data polymorphic associations

ember-data, ember.js

Solution

With the latest ember-data build you can now use polymorphic associations:

You need to configure your Models to make it polymorphic:

/* polymorphic hasMany */
App.User = DS.Model.extend({
 messages: DS.hasMany(App.Message, {polymorphic: true})
});

App.Message = DS.Model.extend({
  created_at: DS.attr('date'),
  user: DS.belongsTo(App.User)
});

App.Post = App.Message.extend({
  title: DS.attr('string')
});

/* polymorphic belongsTo */
App.Comment = App.Message.extend({
  body: DS.attr('string'),
  message: DS.belongsTo(App.Message, {polymorphic: true})
});

You also need to configure `alias` properties on your `RESTAdapter`

DS.RESTAdapter.configure('App.Post' {
  alias: 'post'
});
DS.RESTAdapter.configure('App.Comment' {
  alias: 'comment'
});

The result expected from your server should be like this:

{
    user: {
        id: 3,
        // For a polymorphic hasMany
        messages: [
            {id: 1, type: "post"},
            {id: 1, type: "comment"}
        ]
    },

    comment: {
        id: 1,
        // For a polymorphic belongsTo
        message_id: 1,
        message_type: "post"
    }
}

More information in this github thread

Problem

Has anybody come up with an answer for polymorphic associations and ember-data? We would need some way of being able to query the type at the other end of the relationship from what I can tell. Anybody any thoughts on this?

Original source