2016-04-26 7 views
1

私のユーザーがあり、一部のユーザーは医師であり、一部は歯科医であり、一部は栄養士であり、私は自分の使用を得ると私はユーザーとユーザーのデータをバックに送信したいユーザーの2列(MODEL_IDとモデル)に基づいて、morphToというカスタムメソッドでそれdoindしようとイムは、洙私はモデルが私のリソースオンモデルのカスタムメソッドを返す定義なしの返信

module.exports = function(sequelize, DataTypes) { 
    var user = sequelize.define('users', { 
    email: {type: Sequelize.STRING, field: 'email'}, 
    password: Sequelize.STRING, 
    name: Sequelize.STRING, 
    company_id: Sequelize.INTEGER, 
    rg: Sequelize.STRING, 
    cpf: Sequelize.STRING, 
    birth_date: Sequelize.STRING, 
    sex: Sequelize.STRING, 
    address: Sequelize.STRING, 
    number: Sequelize.STRING, 
    complement: Sequelize.STRING, 
    neighborhood: Sequelize.STRING, 
    city: Sequelize.STRING, 
    cep: Sequelize.STRING, 
    uf: Sequelize.STRING, 
    obs: Sequelize.STRING, 
    status_id: Sequelize.INTEGER, 
    model_id: Sequelize.INTEGER, 
    model: Sequelize.STRING, 
    deleted_at: Sequelize.STRING, 
    created_at: Sequelize.STRING, 
    updated_at: Sequelize.STRING, 
    }, {timestamps:false, attributes: { exclude : [ 'password' ]}, 
     classMethods: { 
     associate: function(models) { 
      user.belongsToMany(models.groups, { 
      through: { 
      model: models.user_groups 
      }, foreignKey:'user_id', as: 'groups'}), 
      user.belongsToMany(models.permissions, { 
      through: { 
      model: models.user_permissions 
      }, foreignKey:'user_id', as: 'permissions'}) 
     }, 
     morphTo: function(models, model_id, model){ 
      if(model == 'medics'){ 
      models.medics.findById(model_id).then(function(results) { 

       return results; 

      }); 

      }else if(model == 'employees'){ 
      models.employees.findById(model_id).then(function(results) { 

       return results; 

      }); 
      } 
     } 
     }}); 

    return user; 

} 

ユーザーを求めている私は、この

models.users.findById(req.params.id).then(function(results) { 
     if(results) 
      console.log(models.users.morphTo(models, results.dataValues.model_id, results.dataValues.model)); 
     else 
      res.status(204).send(); 
    }); 
を持っています

私のコンソールではquエイリアスですが、返品は「未定義」です

Executing (default): SELECT `id`, `crm` FROM `medics` AS `medics` WHERE `medics`.`id` = 1 

私は何を忘れましたか?

答えて

0

私はあなたの約束に問題があると思う:

console.log(models.users.morphTo(models, results.dataValues.model_id, results.dataValues.model)); 

これは、非同期呼び出しです。あなたはすぐに答えを期待すべきではありません、あなたは約束を期待する必要があります。

models.users.findById(req.params.id).then(function(results) { 
    if(results) { 
     models.users.morphTo(models, results.dataValues.model_id, results.dataValues.model).then(function(result) { 
      console.log('This is your result:', result);     
     }); 
    } else { 
     res.status(204).send(); 
    } 
}); 

そして、あなたはあなたのモデル宣言簡素化することができます:

これを試してみてください

morphTo: function(models, model_id, model){ 
    if(model == 'medics'){ 
     return models.medics.findById(model_id); 
    }else if(model == 'employees'){ 
     return models.employees.findById(model_id); 
    } 
} 
関連する問題