복붙노트

[MONGODB] 항상 임베디드와 엠버 데이터 다중 계층 구조

MONGODB

항상 임베디드와 엠버 데이터 다중 계층 구조

나는 한 단계 항상 임베디드 사용할 수 근데 저는 두 수준 깊은 모델을 사용할 수 없습니다입니다. 긴급한 도움이 필요하십니까

App.Post = DS.Model.extend(
  title: DS.attr("string")
  comment: DS.belongsTo("App.Comment")
)

App.Comment = DS.Model.extend(
  text: DS.attr("string")
  ferment: DS.belongsTo("App.Ferment") 
)

App.Ferment = DS.Model.extend(
  fermenter: DS.attr("string")
)

App.Adapter.map App.Post,
  'comment':
    embedded: "always"


App.Adapter.map App.Comment,    
  ferment :
    embedded: "always"

# -----------------------------
App.store = App.Store.create(
  adapter: App.Adapter.create()
)
# -----------------------------

App.store.adapter.load App.store, App.Post,
  id: 12
  comment: {text: "blabla", ferment:{fermenter:'abcd'}}

console.log App.Post.find(12).get("comment.text")
console.log App.Post.find(12).get("comment.ferment.fermenter")

나는 blabla로 comment.text에 대한 로그 수 그러나 일에 두 번째 부분을 얻을 수 없습니다. 나는 엠버 데이터 저장소의 개정 (11)를 사용하고 있습니다. 비슷한 문제 / 솔루션 중 하나.

흥미롭게도 우리는 포스트 -hasMany-> 댓글, 의견 -hasOne-> 발효 있도록 hasMany의 시도. 이 작품의 벌금, 여기에 코드입니다.

App.Post = DS.Model.extend(
  title: DS.attr("string")
  comments: DS.hasMany("App.Comment")
)

App.Comment = DS.Model.extend(
  text: DS.attr("string")
  ferment: DS.belongsTo("App.Ferment")
)

App.Ferment = DS.Model.extend(
  fermi: DS.attr("string")
)

App.Adapter.map App.Post,
  comments:
    embedded: "always"

App.Adapter.map App.Comment,
  ferment:
    embedded: "always"

App.store = App.Store.create(
  adapter: App.Adapter.create()
)

# App.store.adapter.serializer.configure(App.Comment,
#   sideloadAs: 'comments' 
# )
App.store.adapter.load App.store, App.Post,
  id: 12
  comments: [{text: "blabla", ferment:{fermi: "found fermi"}}]

console.log App.Post.find(12).get("comments.firstObject.text")
console.log App.Post.find(12).get("comments.firstObject.ferment.fermi")

해결법

  1. ==============================

    1.엠버 레일에 남아있는 몇 가지 버그 수정은 여전히 ​​있습니다 : 때문에 우리는 함수의 고통

    엠버 레일에 남아있는 몇 가지 버그 수정은 여전히 ​​있습니다 : 때문에 우리는 함수의 고통

    extractEmbeddedBelongsTo: function(loader, relationship, data, parent, prematerialized)     {
    var reference = this.extractRecordRepresentation(loader, relationship.type, data, true);
    prematerialized[relationship.key] = reference;
    
    // If the embedded record should also be saved back when serializing the parent,
    // make sure we set its parent since it will not have an ID.
    var embeddedType = this.embeddedType(parent.type, relationship.key);
    if (embeddedType === 'always') {
      reference.parent = parent;
    }
    

    }

    관계에 BelongsTo 임베디드 오브젝트의 추출을 생략한다. 잘못된 사람은 여기에 있습니다 :

    extractEmbeddedBelongsTo: function(loader, relationship, data, parent, prematerialized) {
    var reference = loader.sideload(relationship.type, data);
    prematerialized[relationship.key] = reference;
    
    // If the embedded record should also be saved back when serializing the parent,
    // make sure we set its parent since it will not have an ID.
    var embeddedType = this.embeddedType(parent.type, relationship.key);
    if (embeddedType === 'always') {
      reference.parent = parent;
    }
    

    }

  2. from https://stackoverflow.com/questions/14896049/ember-data-multi-level-hierarchy-with-embedded-always by cc-by-sa and MIT license