Sails.js заполняет вложенные ассоциации
У меня есть вопрос об ассоциациях в Sails.js версии 0.10-rc5. Я создавал приложение, в котором несколько моделей связаны друг с другом, и я пришел к тому моменту, когда мне нужно каким-то образом найти связи.
Есть три части:
Сначала есть что-то вроде сообщения в блоге, которое пишется пользователем. В блоге я хочу показать информацию о связанном пользователе, например, его имя. Теперь все отлично работает здесь. До следующего шага: я пытаюсь показать комментарии, которые связаны с постом.
Комментарии представляют собой отдельную модель, называемую комментарием. Каждый из которых также имеет автора (пользователя), связанного с ним. Я могу легко показать список комментариев, хотя, когда я хочу отобразить информацию о пользователе, связанную с комментарием, я не могу понять, как заполнить комментарий информацией о пользователе.
В моем контроллере я пытаюсь сделать что-то вроде этого:
Post
.findOne(req.param('id'))
.populate('user')
.populate('comments') // I want to populate this comment with .populate('user') or something
.exec(function(err, post) {
// Handle errors & render view etc.
});
В действии «Показать» моего Поста я пытаюсь получить информацию, подобную этой (упрощенно):
<ul>
<%- _.each(post.comments, function(comment) { %>
<li>
<%= comment.user.name %>
<%= comment.description %>
</li>
<% }); %>
</ul>
Однако comment.user.name будет неопределенным. Если я попытаюсь получить доступ к свойству user, например, comment.user, оно покажет его идентификатор. Что говорит мне, что это не автоматически заполняет информацию пользователя в комментарии, когда я связываю комментарий с другой моделью.
У кого-нибудь есть идеалы, чтобы решить это правильно :)?
Заранее спасибо!
Постскриптум
Для пояснения, вот как я в основном настроил ассоциации в разных моделях:
// User.js
posts: {
collection: 'post'
},
hours: {
collection: 'hour'
},
comments: {
collection: 'comment'
}
// Post.js
user: {
model: 'user'
},
comments: {
collection: 'comment',
via: 'post'
}
// Comment.js
user: {
model: 'user'
},
post: {
model: 'post'
}