У меня есть модель заметок, которую я хочу прикрепить к одной из двух других моделей, клиентов и поставщиков.Ember 2 простых полиморфных отношения
В моей базе данных у меня есть foreignType и ForeignID поля, которое содержит тип и соответствующий идентификатор для клиента или поставщика, что-то вроде
notes: { {id: 1, body:'bar',foreignType:'customer',foreignId:100},
{id: 2, body:'foo',foreignType:'supplier',foreignId:100}
}
То есть заметка может быть прикреплена к клиента или поставщика.
Соглашение, похоже, что поле будет называться noteType? Я видел tutorial, где родственный тип был вложен в JSON, а не в корне.
Моего Эмбер модель выглядит следующим образом:
//pods/note/model.js
export default DS.Model.extend({
//...
body: DS.attr('string'),
foreign: DS.belongsTo('noteable',{polymorphic:true})
});
//pods/noteable/model.js (is there a better/conventional place to put this file?)
export default DS.Model.extend({
notes: DS.hasMany('note')
});
//pods/customer/model.js
import Noteable from '../noteable/model';
export default Noteable.extend({ //derived from Noteable class
name: DS.attr('string'),
//...
});
//pods/supplier/model.js
// similar to customer
// sample incoming JSON
//
{"customer":{"id":2,"name":"Foobar INC",...},
"contacts":
[{"id":1757,"foreignType": "customer","foreignId":2,...},
{"id":1753,"foreignType": "customer","foreignId":2,...},
...],
...
"todos":
[{"id":1,"foreignType":"customer","foreignId":2,"description":"test todo"}],
"notes":
[{"id":1,"foreignType":"customer","foreignId":2,"body":"Some customer note "}]
}
Как правильно установить это, то что же ожидать Эмбер?
Мои примечания не соответствуют требованиям модели заказчика. Они отображаются на вкладке «Данные» инспектора Ember, но список заметок любого клиента пуст.
Я вижу несколько возможностей:
расширить клиент/поставщик от DS.Model и имеет свойство
notes: belongsTo('noteable')
, что будет означать belongsTo в примечаниях не полиморфный, так как не будет любые производные классы, только Примечание себя. Не уверен, что ember (data) может правильно обработать это гнездование.длина от Примечание. что, если я хочу иметь другие вещи, такие как адреса или контакты, которые могут быть связаны с клиентом или поставщиком?
создавать дубликаты моделей, таких как customernote/suppliernote, customercontact/suppliercontact, адрес клиента/поставщика/сотрудника. И иметь backend возвратить отфильтрованное имя таблицы/модели в зависимости от конечной точки. Я не люблю повторяться, хотя ....
Ember: 2.2.0
Ember данных: 2.2.1