【问题标题】:Accessing a model's attributes from an associated model in Sails.js从 Sails.js 中的关联模型访问模型的属性
【发布时间】:2014-04-27 11:14:03
【问题描述】:

我正在使用更新的数据库适配器(用于 PostgreSQL)运行 Sails.js 的 beta 版本(v0.10.0-rc3),以便我具有通过 Waterline ORM 进行关联的功能。我正在尝试根据不同的访问级别创建基于角色的用户模型进行授权。用户到角色关联是一对多的。我的模型是:

api/models/User.js

module.exports = {

  attributes: {
    firstName: {
      type: 'string',
      required: true
    },
    lastName: {
      type: 'string',
      required: true
    },
    fullName: function() {
      return this.firstName + " " + this.lastName;
    },
    email: {
      type: 'email',
      required: true,
      unique: true
    },
    encryptedPassword: {
      type: 'string'
    }, 
    role: {
      model: 'role'
    },
    groups: {
      collection: 'group',
      via: 'users'
    }
  },  

  toJSON: function() {
    var obj = this.toObject();
    delete obj.password;
    delete obj.confirmation;
    delete obj._csrf;
    return obj;
  },

  beforeCreate: function (values, next) {
    // Makes sure the password and password confirmation match
    if (!values.password || values.password != values.confirmation) {
      return next({err: ['Password does not match password confirmation.']});
    }

    // Encrypts the password/confirmation to be stored in the db
    require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, encryptedPassword) {
      values.encryptedPassword = encryptedPassword;

       next();
    });
  }
};

api/models/Role.js

module.exports = {

  attributes: {
    name: {
      type: 'string',
      required: true,
      unique: true
    },
    users: {
      collection: 'user',
      via: 'role'
    },
    permissions: {
      collection: 'permission',
      via: 'roles',
      dominant: true
    }
  }
};

我知道 Waterline 还不支持 Through Associations,但我仍然应该能够访问与用户关联的角色名称,对吗?例如:user.role.name 到目前为止,我能够检索角色名称的唯一方法是对角色对象进行第二次查询。

【问题讨论】:

    标签: javascript node.js postgresql sails.js waterline


    【解决方案1】:

    为了访问关联模型,您必须在查询主模型时populate 关联,例如:

    User.findOne(1).populate('role').exec(function(err, user) {
    
        if (err) {throw new Error(err);} 
        console.log(user.role.name);
    
    }
    

    Associations 文档是 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      相关资源
      最近更新 更多