NPM ORM - 保存 hasOne 字段的更新
NPM ORM - Save update of hasOne Field
我有一个设置,其中有一个人在我的应用程序中担任特定角色。
我有以下型号
module.exports = function (orm, db) {
var Person = db.define('person', {
id: { type: 'serial', key: true },
name: { type: 'text' },
email: { type: 'text' },
password: { type: 'text' },
mobilenumber: { type: 'text' },
contract_id: { type: 'integer' },
role_id: { type: 'integer' },
status: { type: 'integer' },
});
Person.hasOne('role', db.models.role, { autoFetch: true });
};
module.exports = function (orm, db) {
var Role = db.define('role', {
id: { type: 'serial', key: true },
name: { type: 'text' },
description: { type: 'text' },
});
};
创建具有特定角色的新人时,一切正常,角色已分配。
创建具有角色的新用户
模板
extends layout
block content
div.container
div.row
form(id='user_form' action='create' method='post')
p name:
input(type='text' name='name')
p email:
input(type='text' name='email')
p password:
input(type='password' name='password')
p mobilenumber:
input(type='text' name='mobilenumber')
p role
select(size='5' name='role')
each role in roles
option(value="#{role.id}") #{role}
input(type='submit' value='add')
控制器
app.get('/new', function (req, res) {
req.models.role.all(function (err, roles) {
res.render('new', {roles:roles});
});
});
app.post('/create', function (req, res) {
var new_person = {};
new_person.name = req.body.name;
new_person.email = req.body.email;
new_person.password = req.body.password;
new_person.mobilenumber = req.body.mobilenumber;
new_person.role_id = req.body.role;
req.models.person.create(new_person, function (err, person) {
if(err) throw err;
res.redirect('/person');
});
});
但是当我尝试更新一个条目时,除了 role_id
.
之外,每个更改的字段都会更新
更新现有用户角色
模板
extends layout
block content
div.container
div.row
form(id='user_form' action='/person/update/#{person.id}' method='post')
p name:
input(type='text' name='name' value='#{person.name}')
p email:
input(type='text' name='email' value='#{person.email}')
p password:
input(type='password' name='password')
p mobilenumber:
input(type='text' name='mobilenumber' value='#{person.mobilenumber}')
p role:
select(size='5' name='role')
each role in roles
option(value="#{role.id}") #{role}
input(type='submit' value='save')
控制器
app.get('/edit/:id', function (req, res) {
req.models.person.get(req.params.id, function (err, person) {
req.models.role.all(function (err, roles) {
res.render('edit', {person: person, roles: roles});
});
});
});
app.post('/update/:id', function (req, res) {
req.models.person.get(req.params.id, function (err, person) {
person.name = req.body.name;
person.email = req.body.email;
person.password = req.body.password;
person.mobilenumber = req.body.mobilenumber;
person.role_id = req.body.role;
console.log(req.body.role); // even prints the correct id when updated
person.save(function (err) {
if(err) throw err;
res.redirect('/person');
});
});
我什至在更新字段时收到正确的 role_id
。由于在更新中保存其他属性是有效的,而 role_id
只是我不理解的人的属性,所以为什么这不可行。如果您需要更多代码,请告诉我。我现在真的被困住了。有人有过同样的经历吗?
编辑:我什至尝试将其转换为 int,但这也没有任何改变 person.role_id = parseInt(req.body.role);
在这种情况下,我不得不使用 setRole
作为 hasOne 关系来保存条目。
app.post('/update/:id', function (req, res) {
req.models.person.get(req.params.id, function (err, person) {
person.name = req.body.name;
person.email = req.body.email;
if (req.body.password) { person.password = req.body.password; }
person.mobilenumber = req.body.mobilenumber;
req.models.role.get(req.body.role, function (err, role) {
if(err) throw err;
person.setRole(role, function (err) {
person.save(function (err) {
if(err) throw err;
res.redirect('/person');
});
});
});
});
});
for (var j in originEntity) {
if (_.isObject(originEntity[j])) {
delete originEntity[j];
}
}
请试试这个,我想是因为你只更改了相关键,而自动获取的对象仍然存在。
我有一个设置,其中有一个人在我的应用程序中担任特定角色。
我有以下型号
module.exports = function (orm, db) {
var Person = db.define('person', {
id: { type: 'serial', key: true },
name: { type: 'text' },
email: { type: 'text' },
password: { type: 'text' },
mobilenumber: { type: 'text' },
contract_id: { type: 'integer' },
role_id: { type: 'integer' },
status: { type: 'integer' },
});
Person.hasOne('role', db.models.role, { autoFetch: true });
};
module.exports = function (orm, db) {
var Role = db.define('role', {
id: { type: 'serial', key: true },
name: { type: 'text' },
description: { type: 'text' },
});
};
创建具有特定角色的新人时,一切正常,角色已分配。
创建具有角色的新用户
模板
extends layout
block content
div.container
div.row
form(id='user_form' action='create' method='post')
p name:
input(type='text' name='name')
p email:
input(type='text' name='email')
p password:
input(type='password' name='password')
p mobilenumber:
input(type='text' name='mobilenumber')
p role
select(size='5' name='role')
each role in roles
option(value="#{role.id}") #{role}
input(type='submit' value='add')
控制器
app.get('/new', function (req, res) {
req.models.role.all(function (err, roles) {
res.render('new', {roles:roles});
});
});
app.post('/create', function (req, res) {
var new_person = {};
new_person.name = req.body.name;
new_person.email = req.body.email;
new_person.password = req.body.password;
new_person.mobilenumber = req.body.mobilenumber;
new_person.role_id = req.body.role;
req.models.person.create(new_person, function (err, person) {
if(err) throw err;
res.redirect('/person');
});
});
但是当我尝试更新一个条目时,除了 role_id
.
更新现有用户角色
模板
extends layout
block content
div.container
div.row
form(id='user_form' action='/person/update/#{person.id}' method='post')
p name:
input(type='text' name='name' value='#{person.name}')
p email:
input(type='text' name='email' value='#{person.email}')
p password:
input(type='password' name='password')
p mobilenumber:
input(type='text' name='mobilenumber' value='#{person.mobilenumber}')
p role:
select(size='5' name='role')
each role in roles
option(value="#{role.id}") #{role}
input(type='submit' value='save')
控制器
app.get('/edit/:id', function (req, res) {
req.models.person.get(req.params.id, function (err, person) {
req.models.role.all(function (err, roles) {
res.render('edit', {person: person, roles: roles});
});
});
});
app.post('/update/:id', function (req, res) {
req.models.person.get(req.params.id, function (err, person) {
person.name = req.body.name;
person.email = req.body.email;
person.password = req.body.password;
person.mobilenumber = req.body.mobilenumber;
person.role_id = req.body.role;
console.log(req.body.role); // even prints the correct id when updated
person.save(function (err) {
if(err) throw err;
res.redirect('/person');
});
});
我什至在更新字段时收到正确的 role_id
。由于在更新中保存其他属性是有效的,而 role_id
只是我不理解的人的属性,所以为什么这不可行。如果您需要更多代码,请告诉我。我现在真的被困住了。有人有过同样的经历吗?
编辑:我什至尝试将其转换为 int,但这也没有任何改变 person.role_id = parseInt(req.body.role);
在这种情况下,我不得不使用 setRole
作为 hasOne 关系来保存条目。
app.post('/update/:id', function (req, res) {
req.models.person.get(req.params.id, function (err, person) {
person.name = req.body.name;
person.email = req.body.email;
if (req.body.password) { person.password = req.body.password; }
person.mobilenumber = req.body.mobilenumber;
req.models.role.get(req.body.role, function (err, role) {
if(err) throw err;
person.setRole(role, function (err) {
person.save(function (err) {
if(err) throw err;
res.redirect('/person');
});
});
});
});
});
for (var j in originEntity) {
if (_.isObject(originEntity[j])) {
delete originEntity[j];
}
}
请试试这个,我想是因为你只更改了相关键,而自动获取的对象仍然存在。