如何访问 Sails.js 中不同控制器的模型属性?
How to access model attributes of different controller in Sails.js?
我的 Sails 项目中有两个 controllers/models,即 Clubs 和 Members。一个俱乐部可以有很多成员。
我尝试将 'Clubs' 的 id 作为 reference id(就像外键)放在 'Members' 中,这样我就可以检索使用 'Members' 中的 参考 ID 注册俱乐部成员。我想在主页上根据他们的俱乐部显示成员。但是我找不到将 'Clubs' 的 id 值传递给 'Members' 控制器的方法。以下是部分代码:
Clubs.js
module.exports = {
attributes: {
clubName: {
type: 'string',
},
clubDesc: {
type: 'string',
},
},
};
Members.js
module.exports = {
attributes: {
memberName: {
type: 'string',
},
clubId: {
type: 'string',
},
},
};
ClubsController.js
module.exports = {
list: function(req, res) {
Clubs.find({}).exec(function(err, club) {
if(err) {
res.send(500, {error: 'Database Error'});
}
res.view('pages/club-list', {clubs:club});
});
},
add: function(req, res) {
res.view('pages/club-add');
},
create: function(req, res) {
var clubName = req.body.clubName;
var clubDesc = req.body.clubDesc;
Clubs.create({clubName:clubName, clubDesc:clubDesc}).exec(function(err){
if(err) {
res.send(500, {error: 'Database Error'});
}
res.redirect('/clubs/list');
});
},
};
MembersController.js
module.exports = {
list: function(req, res) {
Members.find({}).exec(function(err, member) {
if(err) {
res.send(500, {error: 'Database Error'});
}
res.view('pages/member-list', {members:member});
});
},
add: function(req, res) {
res.view('pages/member-add');
},
create: function(req, res) {
var memberName = req.body.memberName;
var clubId = req.body.clubId;
Members.create({memberName:memberName,
clubId:clubId}).exec(function(err){
if(err) {
res.send(500, {error: 'Database Error'});
}
res.redirect('/members/list');
});
},
};
routes.js
module.exports.routes = {
'/': {
view: 'pages/homepage',
},
'/clubs/list': {
view: 'pages/club-list',
controller: 'Clubs',
action: 'list'
},
'/clubs/add': {
view: 'pages/club-add',
controller: 'Clubs',
action: 'add'
},
'/clubs/create': {
controller: 'Clubs',
action: 'create',
},
'/members/list': {
view: 'pages/member-list',
controller: 'Members',
action: 'list'
},
'/members/add': {
view: 'pages/member-add',
controller: 'Members',
action: 'add'
},
'/members/create': {
controller: 'Members',
action: 'create',
},
};
我真的是Sails.js这里的新手,我发现在这件事上很难获得资源。我不确定我是否以你们可以理解的方式表达了这一点。但是如果你们需要更多的理解,请询问更多细节。提前谢谢你。
如果我没理解错的话,您希望在 Clubs
和 Members
之间创建一对多关联。这是它在 Clubs.js
中的样子,您的 'many':
attributes: {
...
members: {
collection: 'Members',
via: 'club'
}
}
然后在 Members.js
,你的 'many':
attributes: {
...
club: {
model: 'Clubs'
}
}
当您执行 Club.find()
时,members
键将是一个成员 ID 数组。如果您这样做 Club.find().populate('member')
,members
键将是一个完全填充的成员对象数组。
Here are the docs on associations.
这与您的问题没有直接关系,因为您是 Sails 的新手,所以请购买,我包含一条评论,将为您提供一些关于如何最好地使用该框架的建议。希望一切顺利!
我的 Sails 项目中有两个 controllers/models,即 Clubs 和 Members。一个俱乐部可以有很多成员。
我尝试将 'Clubs' 的 id 作为 reference id(就像外键)放在 'Members' 中,这样我就可以检索使用 'Members' 中的 参考 ID 注册俱乐部成员。我想在主页上根据他们的俱乐部显示成员。但是我找不到将 'Clubs' 的 id 值传递给 'Members' 控制器的方法。以下是部分代码:
Clubs.js
module.exports = {
attributes: {
clubName: {
type: 'string',
},
clubDesc: {
type: 'string',
},
},
};
Members.js
module.exports = {
attributes: {
memberName: {
type: 'string',
},
clubId: {
type: 'string',
},
},
};
ClubsController.js
module.exports = {
list: function(req, res) {
Clubs.find({}).exec(function(err, club) {
if(err) {
res.send(500, {error: 'Database Error'});
}
res.view('pages/club-list', {clubs:club});
});
},
add: function(req, res) {
res.view('pages/club-add');
},
create: function(req, res) {
var clubName = req.body.clubName;
var clubDesc = req.body.clubDesc;
Clubs.create({clubName:clubName, clubDesc:clubDesc}).exec(function(err){
if(err) {
res.send(500, {error: 'Database Error'});
}
res.redirect('/clubs/list');
});
},
};
MembersController.js
module.exports = {
list: function(req, res) {
Members.find({}).exec(function(err, member) {
if(err) {
res.send(500, {error: 'Database Error'});
}
res.view('pages/member-list', {members:member});
});
},
add: function(req, res) {
res.view('pages/member-add');
},
create: function(req, res) {
var memberName = req.body.memberName;
var clubId = req.body.clubId;
Members.create({memberName:memberName,
clubId:clubId}).exec(function(err){
if(err) {
res.send(500, {error: 'Database Error'});
}
res.redirect('/members/list');
});
},
};
routes.js
module.exports.routes = {
'/': {
view: 'pages/homepage',
},
'/clubs/list': {
view: 'pages/club-list',
controller: 'Clubs',
action: 'list'
},
'/clubs/add': {
view: 'pages/club-add',
controller: 'Clubs',
action: 'add'
},
'/clubs/create': {
controller: 'Clubs',
action: 'create',
},
'/members/list': {
view: 'pages/member-list',
controller: 'Members',
action: 'list'
},
'/members/add': {
view: 'pages/member-add',
controller: 'Members',
action: 'add'
},
'/members/create': {
controller: 'Members',
action: 'create',
},
};
我真的是Sails.js这里的新手,我发现在这件事上很难获得资源。我不确定我是否以你们可以理解的方式表达了这一点。但是如果你们需要更多的理解,请询问更多细节。提前谢谢你。
如果我没理解错的话,您希望在 Clubs
和 Members
之间创建一对多关联。这是它在 Clubs.js
中的样子,您的 'many':
attributes: {
...
members: {
collection: 'Members',
via: 'club'
}
}
然后在 Members.js
,你的 'many':
attributes: {
...
club: {
model: 'Clubs'
}
}
当您执行 Club.find()
时,members
键将是一个成员 ID 数组。如果您这样做 Club.find().populate('member')
,members
键将是一个完全填充的成员对象数组。
Here are the docs on associations.
这与您的问题没有直接关系,因为您是 Sails 的新手,所以请购买,我包含一条评论,将为您提供一些关于如何最好地使用该框架的建议。希望一切顺利!