从 Sails.js 中的关联模型访问模型的属性
Posted
技术标签:
【中文标题】从 Sails.js 中的关联模型访问模型的属性【英文标题】:Accessing a model's attributes from an associated model in Sails.js 【发布时间】:2014-04-27 11:14:03 【问题描述】:我正在使用更新的数据库适配器(用于 PostgreSQL)运行 Sails.js 的 beta 版本(v0.10.0-rc3),以便我具有通过 Waterline ORM 进行关联的功能。我正在尝试根据不同的访问级别创建基于角色的用户模型进行授权。用户到角色关联是一对多的。我的模型是:
api/models/User.js
module.exports =
attributes:
firstName:
type: 'string',
required: true
,
lastName:
type: 'string',
required: true
,
fullName: function()
return this.firstName + " " + this.lastName;
,
email:
type: 'email',
required: true,
unique: true
,
encryptedPassword:
type: 'string'
,
role:
model: 'role'
,
groups:
collection: 'group',
via: 'users'
,
toJSON: function()
var obj = this.toObject();
delete obj.password;
delete obj.confirmation;
delete obj._csrf;
return obj;
,
beforeCreate: function (values, next)
// Makes sure the password and password confirmation match
if (!values.password || values.password != values.confirmation)
return next(err: ['Password does not match password confirmation.']);
// Encrypts the password/confirmation to be stored in the db
require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, encryptedPassword)
values.encryptedPassword = encryptedPassword;
next();
);
;
api/models/Role.js
module.exports =
attributes:
name:
type: 'string',
required: true,
unique: true
,
users:
collection: 'user',
via: 'role'
,
permissions:
collection: 'permission',
via: 'roles',
dominant: true
;
我知道 Waterline 还不支持 Through Associations,但我仍然应该能够访问与用户关联的角色名称,对吗?例如:user.role.name
到目前为止,我能够检索角色名称的唯一方法是对角色对象进行第二次查询。
【问题讨论】:
【参考方案1】:为了访问关联模型,您必须在查询主模型时populate
关联,例如:
User.findOne(1).populate('role').exec(function(err, user)
if (err) throw new Error(err);
console.log(user.role.name);
Associations 文档是 here。
【讨论】:
以上是关于从 Sails.js 中的关联模型访问模型的属性的主要内容,如果未能解决你的问题,请参考以下文章