У меня есть список пользователей-студентов и коллекция классов. Когда я публикую список студентов, я хочу, чтобы он отображал классы, которые они посещают. В моем коде в настоящее время отображаются все классы, которые посещает каждый ученик для каждого ученика, а не классы, относящиеся к отдельному ученику.

Как я могу заставить его отображать правильные классы под правильными студентами.

Путь: classes.js

Template.classes.helpers({
    studentList: ()=> { 
        return Meteor.users.find({_id: { $ne: Meteor.userId() }}); 
    },      
    classes: ()=> {
        return Classes.find({_id: { $ne: Meteor.userId() }});
    },
});

Путь: classes.html

{{#each studentList}}
    {{profile.firstName}}
        {{#each classes}}
            {{class}}
        {{/each}}
{{/each}}

Путь: Classes.js

Schemas.Classes = new SimpleSchema({
    class: {
        type: String
    },
    teacherUserId: {
        type: String,
        autoValue: function() {
            return this.userId
        },
        autoform: {
            type: "hidden"
        }
    },
    studentUserId: {
        type: String,
        optional: true,
        autoform: {
            type: "hidden"
        }
    }
});
0
bp123 24 Фев 2016 в 08:04

3 ответа

Лучший ответ

Когда вы определяете classes: () => Classes.find({_id: { $ne: Meteor.userId() }}) то, что вы сообщаете компьютеру:

Every time I ask you for the box labeled 'classes' I want you to go 
through the box we called 'Classes' and fill 'classes' with everything
you find that doesn't have the '_id' property set to whatever you find
when you look inside of the box that 'Meteor.userId()' gives you.

Это не то, о чем вы хотите просить своего работника. Вы хотите спросить своего работника:

Every time I ask you for the box labeled 'classes' I want you to go
through the box we called 'Classes' and fill 'classes' with everything
that you find where the '_id' is set to a certain string that I am passing
you. 

Что, без особых попыток написать это для вас, может иметь какое-то отношение к использованию this где-то в вашем вспомогательная функция

0
Tim Roberts 24 Фев 2016 в 20:29

Приведенный выше код означает: «Найти все классы, в которых идентификатор класса не равен идентификатору текущего пользователя». Думаю, вы хотите: «Найти все классы, в которых идентификатор текущего пользователя находится в списке студентов "

Предполагая, что классы имеют поле students, которое представляет собой массив идентификаторов пользователей, вы должны сделать следующее:

return Classes.find({students: Meteor.userId()});
1
David Weldon 24 Фев 2016 в 07:16

Благодаря каждому вкладу моя проблема решена! Тим попал в точку. Для тех из вас, кто сталкивается с подобной проблемой, ознакомьтесь с приведенным ниже кодом. Я надеюсь, что это помогает. Еще раз спасибо Тим.

Путь: classes.js

Template.classes.helpers({
    classes: ()=> {
        return JobOffers.findOne({candidateUserId: this._id});
    },
});

Путь: classes.html

{{#each studentList}}
    {{profile.firstName}}
        {{#with classes}}
            {{class}}
        {{/with}}
{{/each}}
1
bp123 24 Фев 2016 в 23:14