2016-11-03 3 views
0

У меня есть регистрационная форма, которая отправляет POST пользователю UserController, подключенному к модели пользователя. Пользователь принадлежит к Организации. Я хочу, чтобы во время регистрации была создана новая строка Organization, и правильное отношение было настроено на пользователя, только что созданного. Возможно ли это с помощью Sails/Waterline на этапе создания пользователя?Sails.js/ассоциация Waterline во время создания

signup.ejs

<h1>Signup</h1> 
<form method="POST" action="/organization/users/"> 
    <input type="email" name="email"> 
    <input type="password" name="password"> 
    <input type="text" name="organizationName"> 
    <input type="submit" value="submit"> 
</form> 

user.js (модель)

module.exports = { 
    attributes: { 
     email: { 
      type: 'email', 
      required: true, 
      unique: true 
     }, 
     password: { 
      type: 'string', 
      minLength: 6, 
      required: true 
     }, 
     organization: { 
      model: 'organization' 
     } 
    } 
}; 

UserController.js

module.exports = { 
    create: function (req, res) { 
    var options = { 
     name: req.param('email'), 
     password: req.param('password') 
    }; 

    User.create(options).exec(function(err, user) { 
     return res.redirect("/users"); 
    }); 

    } 
}; 

ответ

1

Я думаю, что это более подходит Возможно ли это с помощью ватерлинии ..., поскольку то, что вы просите, больше связано с тем, что может сделать ватерлиния. Проверьте waterline documentation.

Вы можете создать новую запись Организации, если имя не существует и присвоить идентификатор user.organization.

создать действие

create: function (req, res) { 
    var options = { 
     name: req.param('email'), 
     password: req.param('password') 
    }; 

    Organization.findOrCreate({name: req.param('organization')}) 
     .exec(function(err,org){ 
     options.organization = org.id; 
     User.create(options).exec(function(err, user) { 
      return res.redirect("/users"); 
     }); 
     }); 
    } 

Но если вы хотите создать новую запись каждый раз, когда вы создаете новый пользователь, вы можете сделать это:

создать действие

create: function (req, res) { 
    var options = { 
     name: req.param('email'), 
     password: req.param('password'), 
     organization: { 
     name: req.param("organization") 
     } 
    }; 

    User.create(options).exec(function(err, user) { 
     return res.redirect("/users"); 
    }); 
    } 

Waterline создаст новую организацию каждый раз пользователь создан.

Примечание:

1) findOrCreate не является атомарной, так что не использовать его, когда ожидается высокий параллелизм, поскольку она реализуется находке, и, если ничего не найдено, создать.

2) Я не уверен, если поведение Model.create документировано, но вы можете найти его при использовании .add() with a new record населенного атрибута.

+0

Вы дали не только отличный ответ, но и узнали, что Waterline создаст записи в связанной таблице, просто предоставив ключ в запросе. Ваша помощь действительно оценена. PS, я обновлю вопрос, чтобы отразить ваш комментарий по этому вопросу. – user1885523

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