У меня есть коллекция Questions
, которую я определил с помощью SimpleSchema в файле collections.js, который находится в вопросах > lib.
В этой коллекции есть поле askedBy
. Это массив строк, в котором хранятся идентификаторы пользователей людей, задавших вопросы.
askedBy: {
type: [String],
optional: true
},
В другом файле, вопросы> сервер> publish.js, у меня есть:
Meteor.publish("questions", function () {
questionList = Questions.find(
{},
{
fields: {
"_id": 1,
"questiontext": 1,
"createdAt": 1,
"askedBy": 1,
"slug": 1
}
}
);
return questionList;
});
Моя цель — сделать доступными имена пользователей, задавших вопрос, т. е. имена пользователей, соответствующие идентификаторам в массиве «askedBy».
Как мне это сделать?
Вещи, которые я пробовал до сих пор:
В collections.js:
Questions.helpers({
askedByUsers: function() {
console.log("askedBy:");
console.log(Meteor.users.findOne(this.askedBy[0]));
return Meteor.users.findOne(this.askedBy[0]);
},
Это не удается, потому что Meteor.users
, по-видимому, имеет доступ только к данным текущего пользователя, вошедшего в систему. Для всех вопросов, заданных другими пользователями, возвращается нулевое значение.
Итак, я попытался добавить это в publish.js:
Meteor.publish("allUsers", function () {
return Meteor.users.find({},
{
"name": 1,
});
});
и Meteor.subscribe("allUsers");
как для collections.js, так и для вопросов.js (у которых есть все мои помощники по шаблонам и обработчики событий). Я также изменил помощника по сбору на:
Questions.helpers({
askedByUsers: function() {
console.log("askedBy:");
console.log(allUsers.findOne(this.askedBy[0]));
return allUsers.findOne(this.askedBy[0]);
},
Но даже это не работает.
Что я делаю неправильно, и как я могу получить имена пользователей, не вошедших в систему?
редактировать: на всякий случай это важно - структура папок
├── client
├── modules
│ ├── admin
└── questions
├── client
│ ├── questions.html
│ └── questions.js
├── lib
│ ├── collections.js
│ └── methods.js
└── server
└── publish.js
...