【发布时间】:2014-03-12 02:52:42
【问题描述】:
有没有办法从 Sails.js 控制器中的嵌入式 json 创建相关对象?
在正在创建的类的控制器中,我需要在不同的类中创建相关记录,并包含刚刚创建的父记录的 id。
“子”记录的数据嵌入在创建父记录的 json 中。使用的数据库是 Mongo,因此它不强制执行关系。
如何创建这些相关对象?
任何示例供参考将不胜感激。
更新:
我已经实现了第一个答案中的更改,现在收到错误“[TypeError: Cannot call method 'all' of undefined]”
有什么想法吗?
编辑添加代码:
采购信息模型
module.exports = {
attributes: {
parent_account:{
type:'string'
},
purchase_date:{
type:'datetime'
},
product:{
type:'string'
},
subscription_length:{
type:'integer'
},
renewal_date:{
type:'date'
},
users_authorized:{
type:'integer'
},
users_activated:{
type:'integer'
},
company_name:{
type:'string'
},
company_contact:{
type:'string'
},
company_email:{
type:'string',
required:true,
email:true
},
company_phone:{
type:'string'
},
intended_use:{
type:'string'
},
// reference to company
company:{
collection: 'company',
via:'purchaser'
}
}
};
公司模式
module.exports = {
attributes: {
company_name:{
type:'string',
required:'true'
},
main_addr1:{
type:'string',
required:'true'
},
main_addr2:{
type:'string',
required:'true'
},
main_city:{
type:'string',
required:'true'
},
main_state:{
type:'string',
required:'true'
},
main_zip:{
type:'string',
required:'true'
},
main_country:{
type:'string',
required:'true'
},
mailing_same_as_main:{
type:'boolean'
},
mailing_addr1:{
type:'string'
},
mailing_addr2:{
type:'string'
},
mailing_city:{
type:'string'
},
mailing_state:{
type:'string'
},
mailing_zip:{
type:'string'
},
mailing_country:{
type:'string'
},
primary_contact:{
type:'string'
},
company_email:{
type:'string',
required:true,
email:true
},
purchaser: {
model: 'purchaseinfo'
}
}
};
PurchaseInfo 控制器
module.exports = {
create: function(res, req){
var purchaseData = req.params.all();
// Extract the company info from the POSTed data
var companyData = purchaseData.company_info;
// Create the new Purchase record
PurchaseInfo.create(purchaseData).exec(function(err,newPurchaseInfo){
if (err){return res.req.serverError(err);}
// Create the new Company, linking it to the purchase
companyData.purchaser = newPurchaseInfo.id;
Company.create(companyData).exec(function(err, newCompany) {
if (err) {return res.serverError(err);}
return res.json(newPurchaseInfo);
})
})
},
_config: {}
};
发布
http://localhost:1337/purchaseinfo/create
body:
{ "parent_account": 1, "purchase_date": "2014-03-03", "product": "C V1", "subscription_length": 12, "renewal_date": "2015-03-03", "users_authorized": 10, "users_activated": 1, "company_name": "Bob's Trucking", "company_contact": "Jane Smith", "company_email":"jsmith@bobstrucking.com", "company_phone": 5035129657, "intended_use": "trucking", "company_info": { "company_name": "Bob's Trucking", "main_addr1": "101 First Street", "main_city": "Portland", "main_state": "OR", "main_zip": "97230", "main_country": "USA", "mailing_same_as_main":"true", "primary_contact": "Jane Smith", "company_email": "info@bobstrucking.com" } }
【问题讨论】:
标签: javascript express sails.js