2013-10-05 3 views
0

여기에 address.js 모델의 속성을 채우려는 고객 모델이 있습니다.하지만 Postman을 사용하여 JSON을 게시 할 때 많은 힌트가없는 500 개의 유효성 검사 오류가 발생합니다. 문제의 원인에 관해서. 돛, js, 자바 스크립트 및 프로그래밍에 익숙하지 않으므로 도움을 주시면 대단히 감사하겠습니다. 따라서 구문이 잘못되었을 수도 있습니다!Sails.js의 다른 모델에서 속성을 가져올 수 없습니다.

//Customer.js 

var Customer = { 
    attributes: { 
     honorific: 'STRING', 
     first_name: 'STRING', 
     middle_name: 'STRING', 
     last_name: 'STRING', 
     addr:'Address.address', 
     delivery_addr:'Address.address', 

     fullName:function() { 
      return this.first_name + ' ' + this.last_name; 
     } 
    } 
}; 

module.exports = Customer; 

답변

1

돛에 다른 모델의 데이터를 가져 오도록 설정할 수 없습니다. 본질적으로, 당신은 Address.addressaddrdelivery_addr 속성이 돛에 그러한 타입이 없기 때문에 의미가없는 돛을 말하고 있습니다.

당신이해야 할 일은 라이프 사이클 콜백 중 하나를 사용하여 주소 모델에서 데이터를 가져 오는 것입니다. 귀하의 코드와 설명을 통해 주소가 각 고객마다 공통적인지 이해할 수 없으며 각 고객별로 다를 수도 있습니다. 후자의 경우, 다른 모델의 주소를 고객 모델로 가져 오려는 이유를 이해할 수 없습니다. 어쩌면 당신이 무엇을 달성하려고하는지, 왜 그런지, 좀 더 설명하면 아마도 당신에게 더 나은 대답을 줄 수있을 것입니다.

어쨌든 beforeValidation 수명주기 콜백을 사용하여 다른 모델 (테스트되지 않음)에서 데이터를 가져 오는 방법은 다음과 같습니다.

module.exports = { 

    attributes: { 
    honorific: 'STRING', 
    first_name: 'STRING', 
    middle_name: 'STRING', 
    last_name: 'STRING', 
    addr: 'json', 
    delivery_addr: 'json', 
    fullName:function() { 
     return this.first_name + ' ' + this.last_name; 
    } 
    }, 

    beforeValidation: function(values, cb) { 
    Address.findOne(1).done(err, address) { 
     if(err) return cb(err); 
     values.addr = address.toJSON(); 
     values.delivery_addr = address.toJSON(); 
     cb(); 
    }); 
    } 

}; 
관련 문제