tutorial ember data ember.js ember-data

ember.js - data - Ember autorreferencia y polimorfismo



ember tutorial (1)

hay un modelo de usuario que también se relaciona a sí mismo como contacto para que el user has_many contacts .

Que cada contacto tiene y pertenece a muchos "grupos". Tanto el usuario como el contacto tienen una dirección.

Leí en http://lukegalea.github.io/ember_data_polymorphic_presentation/#/ un par de veces, pero todavía no entiendo cómo configurar { user | contact } <-> address { user | contact } <-> address relación de { user | contact } <-> address y una asociación de contacts <-> groups en el lado Ember.

Ahora mismo tengo (una representación simplificada):

// Address export default DS.Model.extend({ city: DS.attr(''string''), profile : DS.belongsTo(''profile'', { polymorphic: true, async: true }) }); // Profile export default DS.Model.extend({ name: DS.attr(''string''), phone: DS.attr(''string''), address: DS.belongsTo(''address'', {async: true}) }); // Contact export default Profile.extend({ groups: DS.hasMany(''group'') }); // User export default Profile.extend({ });

Aquí está el JSON

// GET /contacts { "contacts":[ { "name":"Conrad", "address_id":"1", "id":1 }, { "name":"Greyson", "address_id":"2", "id":2 }, { "name":"Tommie", "address_id":"3", "id":3 } ] } // GET /addresses { "addresses":[ { "city":"West Lillaton", "profile_id":"0", "profile_type":"Contact", "id":1 }, { "city":"Weissnatborough", "profile_id":"1", "profile_type":"Contact", "id":2 }, { "city":"Predovicton", "profile_id":"2", "profile_type":"Contact", "id":3 }, { "city":"VKHA", "profile_id":1, "profile_type":"User", "id":4 } ] } // GET /users { "users":[ { "name":"Emile", "address_id":4, "id":1 } ] }


Por lo que yo entiendo no hay necesidad en polimórficos aquí, porque escribiste: "modelo de usuario que también se relaciona a sí mismo ". Debe establecer contacts relación reflexiva para user modelo de user .

Cuando quiera definir una relación reflexiva, debe definir explícitamente el otro lado y establecer el inverso explícito en consecuencia, y si no necesita el otro lado, establezca el inverso en nulo.

http://guides.emberjs.com/v1.12.0/models/defining-models/#toc_reflexive-relation

// User export default DS.Model.extend({ name: DS.attr(''string''), phone: DS.attr(''string''), address: DS.belongsTo(''address'', {async: true, inverse: ''user''}) groups: DS.hasMany(''group'', {async: true}), contacts: DS.hasMany(''user'', { inverse: null }), }); // Address export default DS.Model.extend({ city: DS.attr(''string''), user: DS.belongsTo(''user'', { async: true, inverse: ''address'' }) }); // Group export default DS.Model.extend({ name: DS.attr(''string''), users: DS.hasMany(''user'', {async: true}), });

Si desea que el user y el contact sean diferentes modelos de brasas, entonces debe address profile polimórfico de belongsTo:

// Profile export default DS.Model.extend({ name: DS.attr(''string''), phone: DS.attr(''string''), address: DS.belongsTo(''address'', {async: true, inverse: ''profile''}) }); // Contact export default Profile.extend({ groups: DS.hasMany(''group'', {async: true}), user: DS.belongsTo(''user'', { async: true, inverse: ''contacts'' }) }); // User export default Profile.extend({ contacts: DS.hasMany(''contact'', { inverse: ''user'' }), }); // Address export default DS.Model.extend({ city: DS.attr(''string''), profile: DS.belongsTo(''profile'', { polymorphic: true, async: true, inverse: ''address'' }) }); // Group export default DS.Model.extend({ name: DS.attr(''string''), contacts: DS.hasMany(''contact'', {async: true}), });

Nota: el pago correcto para las direcciones GET debe ser:

// GET /addresses {"addresses":[ { "id":1, "city":"West Lillaton", "profile": {"id:"1", "type":"Contact"}, },{ "id":2, "city":"West Lillaton", "profile": {"id:"2", "type":"User"}, } ]}