我有一个场景,我必须用它的id填充模型的属性。例如...... 在用户模型中:
module.exports = {
attributes: {
activation_link: "string"
},
afterCreate: function(value, cb) {
value.activation_link = "localhost:1337/user/action/"+ value.id;
cb();
}
activation_link的修改值也必须保存在数据库中。怎么能实现呢?
答案 0 :(得分:3)
根据this和this您的代码实际上应该有效:afterCreate
中的操作应该改变生成的对象。
<强>更新强>
嗯......似乎第一个参数不是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;
}
}
答案 1 :(得分:0)
从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();
}