我是meteor的新手,我正在构建我的应用程序,但我遇到了一些"最佳实践"的问题。
我有三个数据库。一个用户,一个用于问题,一个用于答案。把我的网站想象成各种各样的quora。
我正在迭代这些问题,而且我很难访问用户信息。在记录问题的那一刻,我记录了问题,我只记录用户的ID。来自rails背景,这通常是我需要在需要时访问所有其他信息。我没有记录姓名和所有其他信息。
我的问题是访问用户信息的正确方法是什么?我正在进行每个循环,似乎Meteor.user仅适用于登录用户(基本上仅用于我的信息)。我似乎无法在问题帮助器上执行类似Meteor.users.find({_ id:this.user_id})的操作,以便我可以获取每个用户信息。它没有像这样检索。
在我看到的例子中,他们通常会在问题数据库中记录信息。所以他们会记录第一个,姓氏和其他任何必要的东西。但这似乎是我记录两次信息。
访问此信息的正确方法是什么?我应该在发布问题时记录它还是应该每次都从用户数据库中调用它?
我尝试通过服务器方法访问信息,但似乎无法让它工作。已经有一段时间了,所以我应该问一下。
提前致谢!!
答案 0 :(得分:2)
我的解决方案就是保存db中的user_id字段,就像你现在正在做的那样,
如果您保存firstname
或lastname
以及将来可能会更改的问题(考虑到大多数网站都可以选择更改名称)
我似乎无法做像Meteor.users.find({_ id: this.user_id})
这是因为用户数据在客户端不可用,这就是你无法看到数据的原因
解决方案是在向客户发布问题时,您应该发布用户的信息
示例强>
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})
之类的操作,您将获得用户数据。
答案 1 :(得分:0)
我想我找到了解决方案。我没有关闭autopublish,所以这似乎现在正在工作。
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(),它将为用户返回一个数组。因此,如果将其声明为变量,我可以通过说user [0]来访问所有信息。
我不确定这是否是在流星中做到这一点的最佳方法,但它似乎确实有效。
所以,当我在把手中调用物体时,我会说:
{{user.profile.name}}
我认为一旦我关闭自动发布,我将不得不做同样的事情,但从服务器端。