2015-04-15 2 views
0

У меня есть настройка, где у меня есть человек, который имеет определенную роль в моем приложении.NPM ORM - Сохранить обновление 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 - это просто атрибут человека, которого я не понимаю, почему это не сработает. Если вам нужно больше кода, пожалуйста, скажите мне. Я действительно застрял в данный момент. Кто-нибудь испытал то же самое?

Edit: Я даже пытался его отливки к междунар но ничего не меняется, а person.role_id = parseInt(req.body.role);

ответ

0

Я должен был использовать 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'); 
     }); 
     }); 
    }); 
    }); 
}); 
0
for (var j in originEntity) { 
    if (_.isObject(originEntity[j])) { 
     delete originEntity[j]; 
    } 
} 

Пожалуйста, попробуйте это, я думаю, что причина в том, что вы только изменить соответствующий ключ в то время как автоматический неправдоподобным объект все еще существует.

Смежные вопросы