2012-03-15 7 views
0

Sequelize JSを使用して行を削除または更新しようとすると、いくつか問題が発生します。 私は(更新の)このような何かしようとすると:Sequelize jsでの更新と削除の問題

Embed.find(parseInt(req.body.id, 10)).success(function(embed) { 
    embed.updateAttributes({ 
     NOME : req.body.name, 
     EMBED : req.body.embed 
    }).success(function() { 
     res.json({"success" : true}); 
    }).error(function() { 
     res.json({"success" : false}); 
    }); 
}); 

または(削除の):これは、エラーが表示さ

Embed.find(parseInt(req.body.id, 10)).success(function(embed){ 
    embed.destroy().success(function(e) { 
     console.log(e); 
     if(e && e.deletedAt) { 
      res.json({"success": true}); 
     } 
    }).error(function(e){ 
     console.log(e); 
    }); 
}).error(function(){ 
    res.json({"success": false}); 
}); 

を:

return (typeof obj == 'object') && !obj.hasOwnProperty('length') 

はTypeError:呼び出すことはできませんメソッド 'hasOwnProperty' of null null at Object.isHash

誰でもお元気ですか?

+0

どのバージョンをお使いですか? 2行目には何が埋め込まれていますか? – sdepold

+0

こんにちは。私は1.3.7バージョンを使用しています。 "埋め込み"は、正しい行を返すfindメソッドからの答えになります。 –

答えて

1

あなたは間違っていると思います。 find()メソッドを使用している場合、その内部にオブジェクトを渡す必要があります。以下のように。

Embed 
    .findAll({ "id": parseInt(req.body.id) }) 
    .then(function(embed) { ... }); 

そして、このコードはpromiseから配列を返します。したがって、直接embed.updateAttributes(...)として使用することはできません。このように使う必要があります。 embed[0].updateAttributes(...)

または、このように使用できます。

Embed 
    .findOne({ "id": parseInt(req.body.id) }) 
    .then(function(embed) { embed.updateAttributes(...); }); 

findOne()は、見つかったオブジェクトだけを返します。

そして..私は今見ましたが、この投稿は非常に古いです。そして.find()メソッドは非難されました。そこでメソッドをfindAll()に置き換えました。私はこれらが同じプロセスをしていると思います。

関連する問題