我有一个场景,我必须用它的id填充模型的属性。例如..在用户模型中:
module.exports = {
attributes: {
activation_link: "string"
},
afterCreate: function(value, cb) {
value.activation_link = "localhost:1337/user/action/"+ value.id;
cb();
}
activation_link的修改值也必须保存在数据库中。怎么能实现呢?
根据this和this你的代码实际应该工作:你在afterCreate
的操作应该改变结果对象。
UPDATE
嗯......好像第一个参数不是Waterline对象,尽管有what the documentation says。从技术上讲,您可以通过id从DB重新获取记录,更新并保存,而不需要很多开销(因为它应该只在创建时调用一次)。但我真的会避免在数据库中放入依赖于记录ID的字段:这样的数据库变得不可传输,因为你无法保证记录具有相同的ID。所以,解决方案是使用一些令牌来获得这些激活链接(干净的方式),或者只是让activation_link
成为一个函数而不将它放在DB中(简单的方法):
module.exports = {
attributes: {
},
activation_link: function() {
if (!this.id)
return false;
return 'localhost:1337/user/action/' + this.id;
}
}
从afterCreate
变为beforeCreate
(sails -v 0.12.14)
beforeCreate: function (attrs, cb) {
attrs.createdAt = moment().format()
attrs.updatedAt = attrs.createdAt
return cb();
},
beforeUpdate: function (attrs, cb) {
attrs.updatedAt = moment().format()
return cb();
}