这是我两个使用sails generate api model_name
生成的模型
Guitar.js
module.exports = {
schema: true,
attributes: {
brand:{
type: 'string',
required: true
},
messages:{
collection: 'message',
via: 'guitar'
}
}
};
Message.js
module.exports = {
schema: true,
attributes: {
text:{
type: 'string',
required: true
},
author:{
type: 'string',
defaultsTo: 'Anonymous author'
},
guitar:{
model: 'guitar',
required: true
}
}
};
基本上,一个
guitar
可以有多个messages
。当我向数据库中插入新消息时,就会出现问题:
POST http://localhost:1337/message/
带有JSON内容:
{
"text": 4,
"author": "33434",
"guitar": null,
"extra": "This attribute will be removed because schema: true"
}
如果发送此消息,则服务器将引发错误,因为消息必须具有
guitar
。但是,如果我改写
"guitar": 34
,而34是不存在的吉他ID,则会添加message
,并且guitar
将更改为null
。奇怪的。这似乎是一个错误,或者也许是预期的行为,但考虑到NoSQL数据库。
我需要进行严格的关联,以便所有数据都有意义。我希望我不必手动创建自己的控制器即可按我的方式处理此逻辑。
基本上,我想要的是当关联ID不存在时Sails会引发错误。
在撰写本文时,我想到了一个解决方案:只需在数据库服务器(MySQL等)上进行配置,以便必须存在外键,然后处理Sails中的错误。但是我对此并不满意,因为它取决于数据库服务器。我希望此功能甚至可以与localDiskDb一起使用。
我的另一个解决方案是实际手动编写一个控制器,并查看使用类似
Guitar.find(id).add(new_message)
之类的东西会发生什么(也许是错误的,我没有测试过) 最佳答案
我对此不确定,但是您是否尝试过这样:
http://localhost:1337/message/create?text=4&author=3343&guitar=somerandomString
关于javascript - 如何在Sails.js中建立严格的关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43385727/