一对一的协会是否应该是双方的?

我有两个模型(用户和代理)。 然后我创build一个用户和一个代理。 我期待在使用BOTH / user和/ agent的蓝图路线时看到关联。 我只看到用户模型通过/代理蓝图与代理相关联。 /用户蓝图对代理没有任何参考/关联。

当我尝试使用以下命令通过userId访问代理时,问题就出现了:

User.findOne(req.body.userId).populate('agent').exec(function(err, agent) 

“代理”实际上是用户信息…而不是代理人。

这是我的模特:

用户:

 attributes: { agent: { model: 'agent', via: 'owner' } } 

代理:

 attributes: { owner: { model: 'user' } } 

谢谢阅读!

Sails不完全支持一对一的模型关联 – 你必须在两边设置“外键”。 有关更多信息,请参阅https://stackoverflow.com/a/27752329/345484 。 我试图把这个问题作为这个问题的一个重复来解决,但是设置稍有不同。

你已经理解错误。 populate()不会使用新信息replace上次调用。 它从模型(您在populate('attribute')指定)中获取属性,并将模型中的该populate('attribute') idreplace为由其id查找的另一个模型信息。

我们来看看例子。

你有UserAgent模型。

 // api/models/User.js module.exports = { attributes: { agent: { model: 'Agent', via: 'owner' } } }; // api/models/Agent.js module.exports = { attributes: { owner: { model: 'User', via: 'agent' } } }; 

你正在调用User.findOne(userId).populate('agent').exec(function(err, user) {}并期望按照我的理解获得唯一的agent错误。 User模型。

 // api/controllers/AnyController.js module.exports = { index: function(req, res) { User .findOne(req.param('userId')) .populate('agent') .then(function(user) { console.log(user); // User information console.log(user.agent); // Agent information for that user return user; }) .then(res.ok) .catch(res.negotiate); } }; 

你可以在这里阅读更多的人口 – http://mongoosejs.com/docs/populate.html