2013-10-19 4 views
2

내가 (이가 MongoDB를를 사용 Sails.js에 의해 제공됩니다)은 다음과 같이Ember.js 편안하고 모델 관계

내 라우터 설정이 편안 서버에서 데이터를 검색에 관해서 Ember.js에서 모델과 관련된 문제에 봉착 :

App.Router.map(function() { 
    this.route("dashboard"); 
    this.resource('exams', {path: "/exams"}, function() { 
     this.resource('exam', {path: ":exam_id"}, function(){ 
      this.resource('questions', function() { 
       this.route("new"); 
      }) 
     }) 
     this.route("view", {path: "/:exam_id" }); // for viewing exam details 
    }); 
}); 

는 기본적으로 나는 가능한 검사의 목록을 받고 수있는 하나의 질문의 관련 목록을 보려면 그것을 클릭의 각에 대한 몇 가지 세부 사항을 편집하고 있습니다.

http://localhost:1337/api/v1/exams 

산출 : 자원이 포함되지 않고 저장됩니다

{ 
    exams: [ 
     { 
     user_id: "52444c03268a31ea0b000001", 
     title: "Introduction test", 
     private: false, 
     active: false, 
     showResults: false, 
     random: false, 
     _id: "52471342445565e74600000a" 
     }, 
     ... 
    ] 
} 

질문을 별도의 모음입니다

그래서처럼 편안한 어댑터와 액세스되는 시험 자원 아무런 문제가 없다 별도로 액세스됩니다 :

http://localhost:1337/api/v1/questions 

결과 :

{ 
    questions: [ 
     { 
     _id: "52483f404617e6c728c4ed93", 
     title: "What's the capital of Moscow?", 
     exam_id: "52471342445565e74600000a" 
     }, 
     { 
     _id: "52483f6e4617e6c728c4ed94", 
     title: "What's the capital of Switzerland?", 
     exam_id: "52471342445565e74600120a" 
     } 
    ] 
} 

그러나 질문은 항상 시험과 관련이 있어야합니다. 지금까지 Ember.js에서 휴식 경로를 중첩 할 수는 없습니다. 이상적인 휴식 경로는 다음과 같습니다.

http://localhost:1337/api/v1/exams/52471342445565e74600000a/questions 

특정 시험에 대한 모든 질문은 얻을 수 있지만 확실하지 않습니다. 적어도 나는 그것을 일하게하는 관리자가 결코 없다. 내가 원하는 결과를 반환

http://localhost:1337/api/v1/questions/52471342445565e74600000a //<-- exam_id 

은 ... 오직 이것이다 :

그래서 평안 특정 시험과 관련된 질문의 목록을 가져 exam_id와 질문을 조회하기로 결정 간단하게 할 유지 Ember.js에서 허용하지 않는 것은 특정 질문이있는 단일 질문을 받고 있다고 생각하기 때문입니다. 나는 또한 URL을 매개 변수 (../?exam_id=52471342445565e74600000a) 편안한 경로 질문에 exam_id를 밀고로 노력했지만 queryParams는 아직 Ember.js의 일부가 아닌 것 같습니다. Github에서 볼 수 있듯이 적어도 v 1.2 이전에는 그렇지 않았습니다.

내 질문은 : 어떻게 관련이 있고 외래 키를 증명하여이 두 모델을 쿼리합니까? 나는 모든 것을 한 가지로 포함하고 싶지 않습니다. 아니면 모델 간의 관계를 관리하는 더 좋은 방법이 있을까요?

하나의주의 사항 : 필요한 레코드 만 검색하고 전체 미리 가져온 데이터를 정렬하지 않으려면 서버를 올바르게 쿼리 할 수 ​​있어야합니다. 다른 시험이 다른 사용자에게 속하고 다른 시험에 대한 질문이 다른 시험에 표시 (조회) 될 수 없기 때문입니다.

필자는 Ember.js에 다소 익숙해 졌으므로 모든 제안 (또는 더 나은 것은 물론 실제 사례)을 높이 평가할 수 있습니다.

+0

당신이 엠버 데이터를 사용하고 있습니까? – Kingpin2k

답변

1

Ember Data를 사용하는 경우 대부분이 매우 간단합니다.

쿼리 문자열 부분은 간단하다 :

this.get('store').find('question', {exam_id: 123213});

이 '/ API/질문과 같은 GET 뭔가를 생산하는 것?exam_id = 123213 '

관계 부분뿐만 아니라 멋진 슈퍼 쉽게 :

App.BlogPost = DS.Model.extend({ 
    comments: DS.hasMany("comment") 
}); 

App.Comment = DS.Model.extend({ 
    post: DS.belongsTo("blogPost") 
}); 
+0

쿨! 감사! 효과가있다. – kernelpanic