2017-02-01 12 views
0

모델을 업데이트하면 primaryKey 기준을 설정하더라도 워터 록 .update()이 항상 객체 배열을 반환합니다. 내 코드돛 업데이트를 오버라이드하여 하나의 객체 만 반환

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에 따르면, 이것은 일반적인 escenario입니다.

나는이 개 질문이있는 것을 알고 :

  1. 더 나은하지 않을까요 당신이 그 모델이 아닌 배열에 대한 하나 개의 모델 반환 단지 업데이트 된 개체를 찾을 때?

  2. .update()이 하나의 레코드에만 영향을 주었을 때 배열 대신 객체를 반환하려면 어떻게이 함수를 재정의 할 수 있습니까?

답변

0

나는 수선으로 생각하지 않는다. 왜냐하면 update 메소드는 일반화 된 것이므로 조건이 항상 해당하지 않는 곳에 기본 키를 전달합니다.

0

찾기 기준과 일치하는 모든 레코드를 업데이트하는 것이 관례이지만 고유 한 유효성 검사를 모델에 사용하면 아마 1 또는 0 배열을 반환합니다. 그것 손에.

워터 라인 기본값과 이름이 같은 메서드를 구현하여 모델의 메서드를 재정의 할 수 있습니다. 그러나 코드를 완전히 다시 작성해야하므로 실행 가능하지 않습니다. 수면 아래에있는 코드도 변경되지 않습니다.

해결책은 광고 모델에 새로운 기능을 생성됩니다 또한

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. 
    });  
    } 
}; 

. id를 모델 속성으로 사용하지 마십시오 (다른 이름 사용). mongodb와 같은 일부 데이터베이스는 이미이 속성을 기본값으로 추가하므로 모델과 충돌 할 수 있습니다.