У меня есть список записей, которые я ищу для массового обновления с установленными значениями в отдельных полях формы. Когда я пытаюсь запустить POST и обновлять записи на основе значений во входе, я сталкиваюсь с ошибкой в предложении Where, и мне интересно, как я могу проанализировать значение discoverySourceId
для предложения where или что было бы лучшим метод для использования с моей текущей настройкой.Sequelize Bulk Update Array Issue
Error: Missing where attribute in the options parameter passed to update.
Маршрут:
var appRoutes = express.Router();
var _ = require('lodash-node');
var async = require('async');
var models = require('../models/db-index');
appRoutes.route('app/settings/discovery-sources')
.get(function(req, res){
models.DiscoverySource.findAll({
where: {
organizationId: req.user.organizationId
}, attributes: ['discoverySourceId', 'discoverySourceName']
}).then(function(discoverySource){
res.render('pages/app/settings-discovery-sources.hbs', {
discoverySource: discoverySource
});
})
})
.post(function(req, res){
console.log('POST Triggered');
var sources = _.map(req.body.discoverySourceName, function (source) {
return {
discoverySourceName: source,
discoverySourceId: req.body.discoverySourceId
};
});
models.DiscoverySource.update(sources).then(function(){
console.log("Successful update");
res.redirect('/settings/discovery-sources');
});
});
**Form:**
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="annotation-form">
<h2>Discovery Sources</h2>
<form action="/app/settings/discovery-sources" method="post">
{{#each discoverySource}}
<input type="hidden" name="discoverySourceId" value={{this.discoverySourceId}}>
<input type="text" name="discoverySourceName[0]" value="{{this.discoverySourceName}}"><a href="#" id="settings-delete-discovery-source">Delete</a>
<br />
{{else}}
<p>No Discovery Sources</p>
{{/each}}
<button type="submit">Update Sources</button>
</form>
</div>
</div>
</div>
discoverySource:
module.exports = function(sequelize, DataTypes) {
var DiscoverySource = sequelize.define('discovery_source', {
discoverySourceId: {
type: DataTypes.INTEGER,
field: 'discovery_source_id',
autoIncrement: true,
primaryKey: true,
notNull: true,
},
discoverySourceName: {
type: DataTypes.STRING,
field: 'discovery_source_name'
},
organizationId: {
type: DataTypes.TEXT,
field: 'organization_id'
},
},{
freezeTableName: true
});
return DiscoverySource;
}
Вам не хватает предложения where в вызове обновления. Передайте organizationId в предложение where, иначе он обновит каждую отдельную строку в таблице DiscoverySource. – grimurd
Как включить предложение where? Я попробовал 'models.DiscoverySource.update (sources, {where: {discoverySourceId: req.body.discoverySourceId}}), но получил' Unhandled rejection TypeError: build.set не является ошибкой функции – cphill
Я угадываю здесь , но req.body.discoverySourceId скорее всего является строковым типом, а не типом Number (поскольку скрытые входы анализируются как строки, а не числа). Попробуйте parseInt (req.body.discoverySourceId) – grimurd