KeystoneJS, отображение отношений «многие ко многим» в модели AdminUI

Я разбираюсь с KeystoneJS и пытаюсь отобразить отношения «многие ко многим» в AdminUI.

У меня есть две модели: плейлист и трейлер. Они имеют отношение «многие ко многим», определяемое следующим образом:

models/Playlist.js

Playlist.add('Playlist', {
        name: { type: Types.Text, initial: true, required: true, index: true, unique: true },
        description: { type: Types.Textarea, initial: true, required: true },
    }
);

Playlist.relationship({ ref: 'Trailer', refPath: 'title', path: 'trailers' });

модели/Trailer.js

Trailer.add('Trailer', {
		title: { type: Types.Text, required: true, initial: true, index: true },
		playlists: { type: Types.Relationship, ref: 'Playlist', many: true },
	}
)

Отношения правильно моделируются в MongoDB; в поле трейлеров плейлиста есть массив трейлеров ObjectID. Но когда я просматриваю плейлист в AdminUI, я вижу только «Нет связанных трейлеров...»

Почему это не работает? Я хочу видеть отношения в AdminUI.

Документация по этой функции бесполезна. Просто случайные фрагменты кода без какого-либо контекста. Я также безуспешно следовал примеру в «Practical Keystone JS».


person Twig2let    schedule 16.09.2017    source источник


Ответы (1)


Что касается вариантов отношений:

path — это имя, которое вы хотите использовать для поля в модели. В этом случае мы могли бы назвать это «трейлеры**».

ref — это модель, на которую ссылаются (та, у которой есть поле отношения). В данном случае «Трейлер».

refPath – это поле в модели, на которую ссылаются, имеющее отношение. В данном случае «плейлисты».

Попробуй это:

// модели/Playlist.js

var Playlist = new keystone.List('Playlist');

Playlist.add({
  name: { type: Types.Text, initial: true, required: true, index: true, unique: true },
  description: { type: Types.Textarea, initial: true, required: true },
});

Playlist.relationship({ path: 'trailers', ref: 'Trailer', refPath: 'playlists' });

// модели/Trailer.js

var Trailer = new keystone.List('Trailer');

Trailer.add({
  title: { type: Types.Text, required: true, initial: true, index: true },
  playlists: { type: Types.Relationship, ref: 'Playlist', many: true },
});
person Steve Holgado    schedule 18.09.2017
comment
Идеальный! Я совершенно неправильно понял параметр refPath. Спасибо - person Twig2let; 18.09.2017