如何使用Sails 0.10.x在一对多关系中引用关联模型
How to reference associated models in a one-to-many relationship with Sails 0.10.x
我使用的是Sails.js
0.10版本。x,我刚刚开始尝试associactions
的东西。
在我的场景中,我有一个用户,他有许多文档。
所以在/api/models/User.js
中我有:
module.exports = {
// snipped out bcrypt stuff etc
attributes: {
email: {
type: 'string',
unique: true,
index: true,
required: true
},
documents: {
collection: 'document',
via: 'owner'
},
}
};
和在/api/models/Document.js
我有:
module.exports = {
attributes: {
name: 'string',
owner: {
model: 'user'
}
}
};
在我的DocumentController
中我有以下内容:
fileData = {
name: file.name,
owner: req.user
}
Document.create(fileData).exec(function(err, savedFile){
if (err) {
next(err);
} else {
results.push({
id: savedFile.id,
url: '/files/' + savedFile.name,
document: savedFile
});
next();
}
});
通过命令行查看我的本地mongo
数据库,我可以看到文档的所有者字段设置如下"owner" : ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx")
,这是预期的。
然而,当我稍后在DocumentController中通过sails.log.debug("user has documemts", req.user.documents);
检查req.user
对象时,我看到
debug: user has documents [ add: [Function: add], remove: [Function: remove] ]
而不是Document
对象的数组
在我的slim
模板
if req.user.documents.length > 0
ul
for doc in req.user.documents
li= doc.toString()
else
p No Documents!
我总是收到"No Documents!"
我似乎错过了一些明显的东西,但我不确定那是什么
我通过仔细阅读Waterline
源代码得出了这个问题。
首先,正如我所希望的那样,关联的双方都受到Document
实例创建的影响,我只需要重新加载我的用户。
在控制器中,这就像User.findOne(req.user.id).populateAll().exec(...)
我还修改了我的passport
服务助手如下
function findById(id, fn) {
User.findOne(id).populateAll().exec(function (err, user) {
if (err) return fn(null, null);
return fn(null, user);
});
}
function findByEmail(email, fn) {
User.findOne({email: email}).populateAll().exec(function (err, user) {
if (err) return fn(null, null);
return fn(null, user);
});
}
现在user
和它的关联,每个请求都被正确加载。
我不得不挖掘源代码来找到populateAll()
方法,因为它实际上没有记录在我能找到的任何地方。我也可以使用populate('documents')
代替,但我即将向用户添加其他关联,因此需要populateAll()
来加载所有相关的关联。
- 水线
associations
docs - 水线
/lib/waterline/query/deferred.js#populateAll
- 引用对象中的通用值
- 如何在JavaScript中将字符串转换为函数引用
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 在动态创建的元素上获取对特定选择器的引用
- IIFE中的函数引用不可用
- 如何通过引用var Using DataTables来进行分页或排序
- 如何在创建键时引用来自同一对象的键
- Datatables:通过DOM数据源中的名称引用列
- 自引用回调
- 引用类变量中的原型方法
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Vanilla JS通过引用移除数组元素
- 气质的“nestRemoting()”有时可以'找不到关系
- 如何在 Meteor 中添加与自动表单的关系或引用
- 在子对象中创建对父对象的引用是否会导致循环关系
- 如何创建一个模板随机图片和引用没有对应关系
- 序列自引用有许多关系
- 了解MongoDB中的多对多关系以及如何解引用集合
- 如何使用Sails 0.10.x在一对多关系中引用关联模型
- 除非调用console.log,否则未定义循环引用父子关系