Как получить доступ к атрибутам модели другого контроллера в Sails.js? - PullRequest
0 голосов
/ 14 декабря 2018

В моем проекте 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');
        });

    },

};

rout.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 Ответ

0 голосов
/ 15 декабря 2018

Если я правильно понимаю, вы хотите создать связь «один ко многим» между 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, я включил комментарий, который даст вам несколько советов о том, как лучше всего использовать фреймворк.Я надеюсь, что все идет хорошо!

...