У меня есть несколько связанных моделей, и я хотел бы обновить атрибут updatedAt
(autoUpdatedAt
), равный modelA
, с помощью текущей отметки времени при изменении определенных атрибутов других моделей (например, modelB
).До сих пор мне удавалось обновлять метку времени с помощью перехватчиков жизненного цикла Sails, но только в случае изменения атрибута любой на другие модели.
Я гуглил несколько часов, но я новичокпаруса, так что, возможно, я не подбираю правильные ключевые слова.Спасибо за любую помощь.Самый близкий ответ, который я могу найти: После обновления, как сравнить экземпляр модели с его прежним состоянием
@ myusuf говорит, что делать, но не совсем, как это сделать, и я 'Я застрял на реализации.(Я пытаюсь провести рефакторинг, основываясь на ответе @ r0hitsharma, но пока это полностью ломает мой хук жизненного цикла.)
Вот упрощенный пример:
server / api / models / ModelA.js (модель для обновления) ...
module.exports = {
autoUpdatedAt: true,
attributes: {
id: {
type: 'integer',
autoIncrement: true,
primaryKey: true,
unique: true
},
modelBs: {
collection: 'modelB',
via: 'modelA'
}
}
}
server / api / models / ModelB.js (при изменении modelB.firstAttribute
пользователем modelA.updatedAt
следует заменить текущим временем) ...
module.exports = {
attributes: {
firstAttribute: {
type: 'string'
},
secondAttribute: {
type: 'string'
},
modelA: {
model: 'modelA',
required: true,
notNull: true
},
afterUpdate: handleModelUpdate,
afterCreate: handleModelUpdate,
afterDestroy: handleModelUpdate
}
function handleModelUpdate(modelA, callback) {
ModelB.findOne({ tableA: tableA.id })
.then(modelA => {
return ModelA.update(this.id, { updatedAt: new Date() });
})
.catch(error => callback(error))
.then(() => callback());
}
Как ограничить функцию ловушки жизненного цикла handleModelUpdate
до только firstAttribute
изменениями и игнорировать secondAttribute
изменения?