如何从现有模型创建新的Sails模型

时间:2014-11-03 13:17:36

标签: node.js mongodb sails.js data-modeling waterline

我是Sails的新手并创建了一个简单的应用程序 我现在卡在数据模型中 User模型如下:

module.exports = {

attributes: {
    firstName: {
        type: 'string'
    },
    lastName: {
        type: 'string'
    },
    email: {
        type: 'email',
        required: true
    },

    password: {
        type: 'String'
    },
    passwordSalt: {
     type: 'String'
    },
    projects:{
     collection: 'ProjectMember',
     via: 'userId'
    }
  }
};  

我还需要一个名为TinyUser的模型,它从User获取一些属性(就像用户的外键一样),这样我就可以访问TinyUser而不是直接访问User。登记/> TinyUser Model如下:

module.exports = {  
 tableName: 'User',  
  attributes: {  
    firstName:{  
     type: 'string'  
    },  
    lastName: {  
      type: 'string'
  },
  email: {
      type: 'email'
  }  
}  
};  

ProjectMember模型如下:

module.exports = {

attributes: {

    projectId: {
        model: 'Project'
    },
    userId: {
        model: 'TinyUser'
    },
    projectRole: {
        model: 'ProjectRole'
    },

}  
};  

在Sails中,无论如何我可以在TinyUser中保存数据而不实际创建但仅保存用户表数据的某些属性?

要说清楚,如果有另一个名为Task的表并且它正在尝试访问用户数据,那么TinyUser作为模型而不是用户是更好的选择,因为它只包含所需信息。用于任务而不是存储用户所做的所有其他字段。

有什么方法可以解决这个问题吗? 在此先感谢

1 个答案:

答案 0 :(得分:1)

你是说你需要拥有" TinyUser"继承自"用户"模型?

你可以这样做。

/api/services/baseUserModel.js:



module.exports = {

  attributes: {
    firstName: 'string',
    lastName: 'string',
    email: {
      type: 'email',
      required: true
    },
    password: 'string',
    passwordSalt: 'string',
    projects: {
      collection: 'ProjectMember',
      via: 'userId'
    }
  }
};




/api/models/TinyUser.js:



var baseUserModel = require('../services/baseUserModel'),
  _ = require('lodash');

module.exports = _.merge({
  tableName: 'User',
  attributes: {
    firstName: 'string',
    lastName: 'string',
    email: {
      type: 'email',
      required: true
    }
  }
}, baseUserModel);




ProjectMember模型应为:



module.exports = {

  attributes: {

    projectId: {
      model: 'project'
    },
    userId: {
      model: 'tinyuser'
    },
    projectRole: {
      model: 'projectrole'
    }

  }
};