我正在尝试建立一个类似于Reddit的网站。这是指向so far的链接,此处是该网站的code。因此,如果用户创建了一个帐户并点击其中一个网站链接,它就会将用户发送到有关该网站的网页,并在其下方添加评论表单。当用户发表评论并点击“保存”时,他们的评论将显示在页面底部。
我遇到的问题是发布的评论会显示在网站的所有详细页面上。例如,如果用户点击Google链接然后在页面上发表评论,然后返回并单击Coursera,则用户所做的评论也会显示在Coursera页面上。
目前我有这段代码将注释呈现到comments_section模板中:
Template.comments_section.helpers({
comments:function(){
return Comments.find({});
}
});
有没有办法可以将网站ID传递给find方法,以便过滤掉在其他网页上发表的评论?
答案 0 :(得分:1)
您应该将每条评论链接到该网站:
创建字段websiteId
Comments.insert({
comment:comment,
postedOn: new Date(),
websiteId: Router.current().params._id
});
在路线上
this.render('comments_section', {
to: "section",
data: function(){
return Comments.find({websiteId:this.params._id});
}
});
那应该使用该网站ID查询评论
让我知道
修改强>
而是在路由器中查询,尝试从模板查询:
Template.comments_section.helpers({
comments:function(){
return Comments.find({websiteId:this.params._id});
}
});
答案 1 :(得分:0)
两个选项,真的。第一个是@yudap上面说的,但另一个是反规范化并将所有注释直接添加到帖子文档中。例如,您对帖子的初始插入内容如下所示:
Posts.insert({
title: "this dog is a cat",
link: "http://nickelodeon.wikia.com/wiki/CatDog",
comments: []
});
然后每当有人试图插入评论时,你都可以这样做:
Posts.update(this.params._id, {
$push: {
$each: [{
content: "You're totally right, that dog is a cat",
userId: Meteor.userId(),
timestamp: new Date()
}],
$sort: { timestamp: 1 }
}
});
然后,如果您愿意,可以一次性获取帖子和所有相关评论。