如何在Sails.js中访问不同控制器的模型属性?

时间:2018-12-14 04:06:31

标签: sails.js sails-mongo

我在Sails项目中有两个控制器/模型,分别是 Clubs Members 。一个俱乐部可以有很多成员。

我尝试将'Clubs'的ID作为参考ID (如外键)放在'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的新手,我发现很难获得有关此问题的资源。我不确定我是否以你们能理解的方式表达了这一点。但是如果您需要更多的了解,请提供更多详细信息。预先谢谢你。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您正在寻找在ClubsMembers之间建立一对多的关联。 Clubs.js(您的“很多”)中的外观如下:

attributes: {
    ...
    members: {
        collection: 'Members',
        via: 'club'
    }
}

然后在Members.js中输入您的“很多”:

attributes: {
     ...
     club: {
         model: 'Clubs'
     }
}

执行Club.find()时,members键将是一组成员ID。如果您执行Club.find().populate('member'),则members键将是一个完全填充的成员对象的数组。

Here are the docs on associations.

这与您的问题没有直接关系,请购买,因为您是Sails的新手,我提供的评论将为您提供一些有关如何最佳使用框架的建议。我希望一切顺利!