Ember.js Embedded与许多关系并不总是有效的

Ember.js Embedded与许多关系并不总是有效的,ember.js,ember-data,relationship,Ember.js,Ember Data,Relationship,我有一个ticket模型,它有一个ticket\u持有者的属性,这是一个具有许多关系的属性 ticket_holders: DS.hasMany('ticket-holder'), ticket holder型号有一个ticket属性,定义为belongsTo ticket: DS.belongsTo('ticket') 在ticket序列化程序中,我定义了EmbeddedRecordsMixin,并像这样设置attrs属性 export default DS.RESTSerializer.

我有一个
ticket
模型,它有一个
ticket\u持有者的属性
,这是一个
具有许多关系的属性

ticket_holders: DS.hasMany('ticket-holder'),
ticket holder
型号有一个
ticket
属性,定义为
belongsTo

ticket: DS.belongsTo('ticket')
ticket
序列化程序中,我定义了
EmbeddedRecordsMixin
,并像这样设置
attrs
属性

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin,{
    attrs: {
        ticket_holders: {embedded: 'always'}
    },
    ...
API中的示例
ticket
如下所示

{
   "eid":"5060",
   "user_id":"13193",
   "ticket_id":"612",
   "ticket_purchase_code":"1ab9e0f20178220a75d5d2ca18322efa",
   "ticket_purchase_behalf_name":null,
   "ticket_purchase_behalf_email":null,
   "ticket_name_alias":null,
   "ticket_cost":"0.00",
   "ticket_ticketing_time":"2015-11-17 11:24:32",
   "ticket_qty":"1",
   "ticket_total":"1.00",
   "ticket_paid":"1",
   "ticket_transaction_id":"noch_5060564b54c0c42ffy0M8tpk",
   "ticket_validation_phrase":"",
   "ticket_pay_type":"card",
   "ticket_qty_redeemed":"0",
   "ticket_refunded":"0",
   "ticket_promo_code_used":"",
   "ticket_name":"Ticket #2",
   "ticket_purchase_user_name":"Tony Stark",
   "ticket_holders":[
      {
         "holder_code":"hc_299dc35e",
         "holder_user_id":"0",
         "holder_id":"8181",
         "holder_name":"Jordan again",
         "holder_email":"Riser.jordan@gmail.com",
         "holder_phone":"",
         "holder_paddle_number":"4888",
         "holder_rsvp":"0",
         "holder_redeemed":"1",
         "holder_last_updated":"2016-05-13 19:07:13",
         "ticket_qrcode":"barcode\/barcode.processor.php?encode=QRCODE&bdata=&qrdata_type=link&qr_link_link=http%3A%2F%2Fbidr.co%2Fl%2F8qexEa&height=500&scale=2&bgcolor=%23ffffff&color=%231B3448&file=&folder&type=png&Genrate=Create+Barcode&ECLevel=L&margin=",
         "ticket_pdf":"http:\/\/bidr.co\/ticket\/pdf_ticket.php?s1=1ab9e0f20178220a75d5d2ca18322efa&s2=hc_299dc35e"
      },
      ...
   ]
}
ticket
的主密钥设置为
primaryKey:“ticket\u purchase\u code”,
因此,在存储方法的normalize函数中,我使用循环遍历每个
票证
抓取它的
票证购买代码
,然后循环遍历每个
票证持有人
数组,并将每个调用的
票证购买代码
的新属性设置为我从其父级获得的属性
票据
记录

当我尝试在
票证
上循环时,似乎并非总是将
票证持有人
归因于
票证
,然后在模板中它是
票证持有人

{{#each tickets as |purchase|}}
...
    {{#each purchase.ticket_holders as |ticket|}}
    ...
    {{/each>
{{/each}}
有时我在每张
票下只看到一个
持票人
,有时我在每张
票下看到所有正确的
持票人
,但更一致的是,我在每张
票下只看到一个
持票人

我的人际关系建立得不对吗


我还尝试将我在
票证
序列化程序中循环的每个
票证持有者
上的
票证购买码
更改为
票证id
,以查看这是否可行,但它也不能正常工作。

我以前遇到过这个问题。对我来说,情况是,我有两张票,都有相同的持票人,即,
“票号”:“612”
“票号”:“633”
都有
“持票人号”:“8181”
。由于
属于
可怜的
持有者id:“8181”
只能链接到一张票证,因此只有最后一张加载到具有
持有者id:“8181”
的余烬数据中的票证才能留住他

解决方案 试着在票夹中注释掉DS.belongsTo('ticket')
,看看它们是否都像您期望的那样加载

 // Try commenting the ling below out
 ticket: DS.belongsTo('ticket')    
比如在这个,


我注释了与
公司的关系:DS.belongsTo('company')
,因此Matt H将出现在前两个公司中。如果你把这条线放回去,你会发现他只会继续属于约翰鞋修理公司,因为它会在Housing4Hope之后加载到余烬数据中。

我会试一试,我也会将两个余烬数据集合并在一起,这两个数据集彼此相似,但不一定相同。也就是说,一个调用将拥有另一个调用的所有记录,但它可能还有一些看起来相似的记录,因此我使用
computed.uniq
来确保没有重复的记录,不确定,但这可能也与此有关。我确保两组看起来完全相同,并删除了
持票人
中的关系以查看。我不能一直让它崩溃,但到目前为止,每次我刷新数据时,它似乎都在工作。是的,玩一下,让我知道。
 App.Contact = DS.Model.extend({
    name : DS.attr('string'),
     // Turn the below on to see your problem. Matt H belongsTo 2 different companies
     //company : DS.belongsTo('Company')
 });