2015-06-07 6 views
1

Я новичок в метеоритах, и я нахожусь в процессе создания своего приложения, но я сталкиваюсь с некоторыми вопросами «лучшей практики».Метеор: Правильный способ доступа к информации пользователя

У меня есть три базы данных. Один для пользователей, один для вопросов и один для ответов. Подумайте о моем сайте как о росте.

Я повторяю вопросы, и мне трудно получить доступ к информации о пользователе. В тот момент, когда вопрос записывается, я записываю вопрос, и я записываю только идентификатор пользователя. Исходя из фона rails, обычно это все, что мне нужно, чтобы получить доступ ко всей другой информации, когда мне это нужно. Я не записываю имя и всю другую информацию.

Вопрос, который у меня есть, является правильным способом доступа к информации пользователя? Я делаю каждый цикл, и кажется, что Meteor.user предназначен только для зарегистрированных пользователей (только для моей информации в основном). Я не могу сделать что-то вроде Meteor.users.find ({_ id: this.user_id}) в помощнике вопросов, чтобы я мог получить информацию о каждом пользователе. Он ничего не получает.

В примерах, которые я видел, они обычно записывают информацию в базу данных вопросов. Поэтому они записывали бы имя, фамилию и все остальное, что было бы необходимо. Но похоже, что я дважды записываю информацию.

Что такое правильный путь доступа к этой информации? Должен ли я записывать его, когда вопрос отправлен, или я должен его вызывать из базы данных пользователей каждый раз?

Я попытался получить доступ к информации с помощью метода сервера, но, похоже, не может заставить его работать. Это было какое-то время, поэтому я бы попросил вместо этого.

Спасибо заранее!

+0

У каждого вопроса есть поле user_id? Фактически публикуются ли соответствующие пользователи клиенту? –

ответ

2

Мое решение было бы просто сохранить user_id поле в БД, как вы делаете прямо сейчас,

Если вы сохраните firstname или lastname с вопросами, они могут измениться в будущем (учитывая тот факт, что в большинстве мест мы имеют возможность изменить имена)

Я не могу сделать что-то вроде Meteor.users.find ({_ ID: this.user_id})

это потому, что пользователь данные не Availbale в клиенте, то есть причина, почему вы не можете увидеть данные

решения является время публикации вопроса к клиенту, вы должны опубликовать информацию о пользователе слишком

Пример

Meteor.publish('question,function(question_id){ 
    var question = Question.findOne(question_id); 
    //get info of the question user 
    var user = Meteor.users.find({_id: question.user_id }); 

//you cannot publish findone result, so do another query 
    var ques_rec= Question.find({_id: question_id}); 

    return [ques_rec, user]; 
}); 

Теперь, когда вы делаете на стороне клиента, я не могу ничего сделать, как Meteor.users.find({_id: this.user_id}), вы получите данные пользователя.

0

Я думаю, что нашел решение. Я не отключил автоматическое отключение, так что сейчас это работает.

Template.questionItem.helpers({ 
    user: function(){ 
    user = Meteor.users.find({_id: this.user_id}).fetch(); 
    return user[0] 
    } 

Я думаю, что в основном вы можете искать пользователей, но по какой-то причине, если я

Meteor.users.find({_id: this.user_id}) 

он возвращает объект, и я не могу найти фактические данные.

Но если я добавлю .fetch() в конце, он вернет массив для пользователя. Поэтому, если объявить его как переменную, я могу получить доступ ко всей информации, указав пользователю [0].

Я не уверен, если это лучший способ сделать это в метеоре, но он, похоже, работает.

Так что, когда я называю объект в рукоятках я иду что-то вроде:

{{user.profile.name}} 

Я думаю, когда я перехожу autopublish от меня будет делать то же самое, но со стороны сервера.

Смежные вопросы