2014-11-18 2 views
2

Я строю очень простой API с парусами, который обрабатывает participants и teams. Команды могут иметь несколько участников, поэтому API должен принимать несколько идентификаторов participants, чтобы создать отношения при создании новой команды.Sails.js сохранить несколько ассоциаций

Участник модель

attributes: { 

    name:{ 
    type : 'string', 
    required : true 
    }, 
    email : { 
    type : 'email', 
    required : true, 
    unique : true, 
    }, 
    age : { 
    type : 'string' 
    } 

} 

модель Team

attributes: { 

    name:{ 
     type : 'string', 
     required : true 
    }, 
    logo : { 
     type : 'string' 

    }, 
    participants:{ 
     model: 'participant' 
    } 
} 

я могу создать команду и сохранить отношения успешно одному участнику проходит следующий JSON к API:

{ 
    "name" : "Best Team ever", 
    "logo" : "http://...." 
    "participants" : "546bc4136911426a093cb903" 
} 

Но у меня возникли проблемы с сохранением отношения к нескольким участникам, я пробовал передать массив идентификаторов API, но он не сохраняет никаких отношений, проходящих и объектов идентификаторов.

Я хотел бы сохранить отношения с несколькими участниками по одному запросу.

Могу ли я завершить это поведение с помощью парусных отношений и чертежей? или я должен сделать это вручную в контроллере

Заранее спасибо.

Я использую sails-mongo на всякий случай.

ответ

2

Да, это определенно возможно. Просто измените свою модель следующим образом:

attributes: { 

    name:{ 
     type : 'string', 
     required : true 
    }, 
    logo : { 
     type : 'string' 

    }, 
    participants:{ 
     collection: 'participant', 
     via: 'id' 
    } 
} 

Затем вы можете передать массив идентификаторов участников при создании записи команды. Обратите внимание, что, однако, поле участников не будет частью коллекций команд на уровне базы данных. Вместо этого ватерлиния автоматически создаст другую таблицу, содержащую отображение идентификатора участника и идентификатора команды. Имя таблицы будет чем-то вроде member_id__team_participant или что-то в этом роде. Когда вы получаете команду, используя чертежи, массив участников будет заполнен. Однако, если вы используете находку findOne для извлечения команды записи, используйте синтаксис ниже для выборки участников

Team.findOne() 
.populate('participants') 
.exec(function (err, team){ 
    // do something here 
}) 

Надеется, что это решит вашу проблему. Дайте мне знать, если у вас по-прежнему возникают проблемы

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