0

電話番号をユーザーに関連付けようとすると、ユーザー オブジェクトにメソッド addPhonenumber がないことがノードに通知されます。(setPhonenumber でも発生します)

req.user.setPhonenumbers(phonenumber).success(function(user){
             ^
TypeError: Object [object Object] has no method 'setPhonenumbers'

オブジェクトを適切に関連付けるにはどうすればよいですか? 以下のコード。

models.js のオブジェクト定義:

exports.User = require("./user")(sequelize, Sequelize);
exports.Phonenumber = require("./phonenumber")(sequelize, Sequelize);
exports.Recording = require("./recording")(sequelize, Sequelize);
exports.Call = require("./call")(sequelize, Sequelize);

User
  .hasMany(Phonenumber)
  .hasMany(Recording);

Phonenumber
  .belongsTo(User)
  .hasOne(Recording)
  .hasMany(Call);

Recording.belongsTo(User);

Call.belongsTo(Phonenumber);

関連付けを設定しようとしています:

      var phonenumber = yp.db.Phonenumber.create({
        number: number.phone_number
      }).success(function(number){
        console.log(number);
        console.log(req.user);
        req.user.setPhonenumbers(phonenumber).success(function(user){
          console.log(user);
        });
      });

上記の req.user の console.log の結果:

{ __options: 
   { timestamps: true,
     instanceMethods: { fullname: [Function] },
     classMethods: {},
     validate: {},
     freezeTableName: false,
     underscored: false,
     syncOnAssociation: true,
     paranoid: true,
     omitNull: false,
     hasPrimaryKeys: false },
  hasPrimaryKeys: false,
  selectedValues: 
   { firstname: 'Nathan',
     lastname: 'Loyer',
     email: 'xxx@gmail.com',
     password: '****',
     facebookid: '****',
     id: 2,
     createdAt: Thu Feb 28 2013 20:40:29 GMT-0600 (CST),
     updatedAt: Wed Mar 06 2013 20:22:05 GMT-0600 (CST),
     deletedAt: null },
  firstname: 'Nathan',
  lastname: 'Loyer',
  email: 'xxx@gmail.com',
  password: '****',
  facebookid: '****',
  id: 2,
  createdAt: Thu Feb 28 2013 20:40:29 GMT-0600 (CST),
  updatedAt: Wed Mar 06 2013 20:22:05 GMT-0600 (CST),
  deletedAt: null,
  isNewRecord: false }

私は何が欠けていますか?

ありがとう!

4

2 に答える 2

1

各 hasMany には、一致する belongsTo が必要です。また、関連する関数は setPhonenumbers になります。参照: http://www.sequelizejs.com/documentation#associations-associating-objects

于 2013-04-06T01:15:48.900 に答える
0

私のネーミングが十分に厳密ではないことが問題であることがわかりました。phonenumber モデルのモデル定義では、Phonenumber の代わりに Number を使用しました。

module.exports = function(sequelize, Sequelize){

  return sequelize.define('Number',{
    number: Sequelize.STRING,
  },{
    paranoid: true
  });

}

そのため、setPhonenumbers 関数ではなく、setNumbers 関数を作成しました。代わりにこれを Phonenumber に変更し、テーブルを再作成すると、上記のコードはほぼ機能します。setPhonenumbers は配列が必要なようだったので、代わりに addPhonenumber を使用しました。

于 2013-04-10T17:37:01.703 に答える