2014-04-22 29 views
0

我对Sails.js(和节点)场景颇为陌生。如何检索Sails.js循环中的相关模型?

目前我正在创建一个应用程序,用户可以在其中创建博客帖子并在之后查看它们。这一切都很好地检索索引页上的帖子,虽然我试图显示作者的名字时遇到了麻烦。

为了达到这个目的,我制作了两个模型:文章和用户。在创建帖子时,我会为帖子模型添加'postingBy'属性,其中包含帖子所属用户的ID。现在

,在我的索引视图(其中我展示帖)我在做这样的事情:在这里

<% _.each(posts, function(post) { %> 
    <a href="/post/show/<%= post.id %>"> 
     <div class="post" data-id="<%= post.id %>" data-model="post"> 
      <div class="row panel-body"> 
       <div class="col-xs-7"> 
        <h3><%= post.title %></h3> 
        <span class="date">By <%= post.postedBy %> <span class="date-nicely"><%= post.createdAt %></span></span> 
       </div> 
       <div class="col-xs-4"> 
        <!-- Other markup --> 
       </div> 
      </div> 
     </div> 
    </a> 
<% }); %> 

一切正常。尽管我想通过使用'postingBy'属性来搜索用户数据,所以我可以显示他们的名字和其他东西。我不想将海报的名称直接存储在Post模型中,因为用户名可能会发生变化,应直接链接到用户名。

'index': function(req, res, next) { 
    var customerID = req.session.User.customerID; 

    Post.find() 
     .where({ customerID: customerID }) 
     .limit(5) 
     .sort('createdAt DESC') 
     .done(function foundPosts(err, posts) { 
      if (err) { 
       return next(err); 
      } 
      res.view({ 
       posts: posts, 
       layout: req.session.layout 
      }); 
     } 
    ); 
}, 

在我的控制,我通过我的MongoDB从(获得通过Post.find()。限制(5)的.sort( 'createdAt DESC')。完成(功能帖子试图环路(ERR ,posts){}); - 类似这样的东西)。我已经在Sail.js/waterline文档中阅读了关于Promised的内容,尽管我无法实现它,因此我可以在每个Post循环中访问特定的用户。

+1

这是我转移到sails.js版本0.10的原因之一。模特协会非常有帮助。 – InternalFX

回答

1

为了得到这个工作,你有两个选择:

使用Sails.js版本0.9

你要嵌套查询。在这个例子看看:

在你.done()功能:

.done(function foundPosts(err, posts) { 

    posts.forEach(function(post){ 
     User.find().where({ owner: post.ownerID }).done(function (err, user) { 
      // create new property on the post object 
      post.user = user.ownerName; 
     }); 
    }); 

    res.view({ 
     posts: posts, 
     layout: req.session.layout 
    }); 
} 

使用Sails.js版本0.10

在(目前)最新sails.js的版本你有协会。这意味着您可以在模型模式中为关联建模。例如:

// From the file: myApp/api/models/posts.js 

module.exports = { 

    attributes: { 
     title:'STRING', 
     body:'STRING', 
     author:{ 
      model: 'user' // Here you associate the user model 
     } 
    } 

} 

这意味着,在您的查询,你可以做这样的事情:

Post.find().where({ customerID: customerID }).populate('user').exec(function(err, posts){ 
    res.view({ 
     posts: posts, 
     layout: req.session.layout 
    }); 
}); 
+0

嗨,谢谢你的回复! - 我已经更新到0.10,但我似乎无法弄清楚如何让协会工作。 我试过 Post.find()其中。({的customerID:}的customerID)填充( '作者')EXEC(函数(ERR,文章){ res.view({ 帖子。帖子, layout:req.session.layout }); }); 我第一次发布的东西一切正常,虽然第二篇文章将重定向到我的帖子/新模板..并停止工作。 另外,邮政究竟知道它属于哪个用户?它在哪里连接? – Darkstra

+0

不知道你的'模型'看起来如何,这很难回答。我建议你先这样做,阅读sails文档中的关联。如果你不知道为什么它不像你期望的那样工作,那么在这里创建另一个问题,我会帮你:) – aludvigsen

+1

这与我通过调用var params = req.params得到我的参数有关。所有()。这混杂在一些随机的ID混淆水线/帆-mongo。当我用var params = req.body替换它时,一切按预期工作:)。 – Darkstra