2017-02-01 6 views
0

モデルを更新するとき、ウォーターロック.update()は、条件をprimaryKeyに設定しても常にオブジェクトの配列を返します。私のコードセイルの更新をオーバーライドして1つのオブジェクトを返す

Ad.update({ id: req.param('id') }, { 
    // desired attributed to be updated 
}).exec(function(err, updatedRecord) { 
    // updatedRecord is always an array of objects 
});  

そしてupdatedRecordを使用するために、上の

、私は非常にきれいではない考えるものですupdatedRecord[0]よう0インデックスに指摘しなければなりません。ドキュメントupdate() in sailsによれば、これは共通のエスケンバリオです。

私は2つの質問を持っている、ということを知っ:

  1. ほうがよいのではないだろうと、あなたがそのモデルではなく、アレイの1つのモデルのリターンだけで更新されたオブジェクトを見つけるとき?

  2. .update()が1つのレコードにしか影響しない場合、配列の代わりにオブジェクトを返すために、この関数をオーバーライドする方法はありますか?

答えて

0

私は水線で可能だとは思わない。なぜなら、更新メソッドは一般化されたものであり、条件が常にそうでない場合に主キーを渡すからです。

0

それは検索条件に一致するすべてのレコードを更新する大会ですが、あなたはおそらくモデルにユニーク検証を使用しているとして、それはおそらくあなたがする必要がある1または0の配列を返します。それは手元にあります。

waterline defaultと同じ名前のメソッドを実装することで、モデル内のメソッドをオーバーライドできます。しかし、コードを完全に書き直す必要があるため、実行可能ではありません。水面の基礎となるコードを変更することもありません。

ソリューションは、あなたの広告モデルに新しい機能を作成されます。また

module.exports = { 
    attributes: { 
    adid: { 
     unique: true, 
     required: true 
    }, 
    updateMe: { 
    } 
    }, 
    updateOne: function(adid, newUpdateMe, cb){ 
    Ad.update({ id: req.param('id') }, { 
    // desired attributed to be updated 
    }).exec(function(err, updatedRecord) { 
     // updatedRecord is always an array of objects 
     if (updatedRecord.length == 1){ 
      return cb(null, updatedRecord[0]); 
     } 
     return cb(null, {}); //also can error if not found. 
    });  
    } 
}; 

。 mongodbのようないくつかのデータベースは既定値としてこの属性を既に追加しており、モデルと競合する可能性があるため、モデル属性としてidを使用しないでください(他の名前を使用してください)。

関連する問題