Как получить доступ к атрибутам модели другого контроллера в Sails.js?
У меня есть два контроллера / модели в моем проекте Sails, который называется Клубы и Члены. Один клуб может иметь много членов.
Я пытаюсь поместить идентификатор "Клубы" в качестве ссылочного идентификатора (например, внешнего ключа) в "Участники", чтобы я мог получить членов клуба, используя ссылочный идентификатор в "Членах". Я хочу показать участников по их клубам на главной странице. Однако я не смог найти способ передать значение id "Clubs" контроллеру "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 здесь и обнаружил, что довольно сложно получить ресурсы по этому вопросу. Я не уверен, если я изложу это так, чтобы вы, ребята, могли понять. Но попросите больше деталей, если вам, ребята, нужно больше понимания. Заранее спасибо.
1 ответ
Если я правильно понимаю, вы хотите создать связь один ко многим между Clubs
а также Members
, Вот как это должно выглядеть в Clubs.js
, ваши "многие":
attributes: {
...
members: {
collection: 'Members',
via: 'club'
}
}
Затем в Members.js
, ваши "многие":
attributes: {
...
club: {
model: 'Clubs'
}
}
Когда вы делаете Club.find()
, members
ключ будет массив идентификаторов членов. Если вы делаете Club.find().populate('member')
, members
Ключ будет массивом заполненных объектов-членов.
Это не имеет прямого отношения к вашему вопросу, купите, так как вы новичок в Sails, я включаю комментарий, который даст вам несколько советов о том, как лучше всего использовать фреймворк. Я надеюсь, что все идет хорошо!