Ember未知关系

问题描述 投票:0回答:3

我目前正在使用Rails + Ember 3.12构建软件,但是遇到了一个奇怪的问题。

我的模型如下:

// test-case-run
import DS from 'ember-data';
const { Model } = DS;

export default Model.extend({
  testCase: DS.belongsTo('test-case'),
  testCaseRunLogs: DS.hasMany('test-case-run-logs')
});

// test-case-run-log
import DS from 'ember-data';
const { Model } = DS;

export default Model.extend({
  testCaseRun: DS.belongsTo('test-case-run'),
  payload: DS.attr('')
});

而且,我的后端返回以下有效负载:

{
  "data": {
    "id": "83",
    "type": "test_case_run",
    "relationships": {
      "test_case": {
        "data": {
          "id": "90",
          "type": "test_case"
        }
      },
      "test_case_run_logs": {
        "data": []
      }
    }
  }
}
{
  "data": {
    "id": "83",
    "type": "test_case_run",
    "relationships": {
      "test_case": {
        "data": {
          "id": "90",
          "type": "test_case"
        }
      },
      "test_case_run_logs": {
        "data": [
          {
            "id": "426",
            "type": "test_case_run_log"
          }
        ]
      }
    }
  },
  "included": [
    {
      "id": "426",
      "type": "test_case_run_log",
      "attributes": {
        "payload": "SCREENSHOT"
      },
      "relationships": {
        "test_case_run": {
          "data": {
            "id": "83",
            "type": "test_case_run"
          }
        }
      }
    }
  ]
}

我有一个自定义适配器,定义:

  pathForType(type) {
    return underscore(pluralize(type));
  }

所以,我认为一切都会顺利进行。

但是,当我进入余烬检查器时,我得到以下信息:enter image description here

似乎我的关系加载不正确。而且,我无法访问任何数据,例如:

log.get('testCaseRun') // that is null 
run.get('testCaseRunLogs.length') // it returns 0 

这很奇怪,因为我的记录已加载到存储中,但没有加载它们的关系。我不知道如何解决此问题,因为我可以从ember获得的信息量非常有限(没有错误,格式看起来不错,...)。

有人可以帮助我了解我的电话怎么了?我已经尝试了很多事情,例如重命名我的模型,但这并不能改善情况。

此外,该模型是唯一一个我有问题的模型。我所有其他型号都没有这个问题。所以,这有点奇怪。

非常感谢

javascript ruby-on-rails ember.js json-api
3个回答
1
投票

unknown中的<(unknown):ember264>是指类的名称。这并不意味着您的关系未正确加载。这只是使用匿名类的Ember Data。

要查看关系的数据,您可以单击该字符串,然后单击content。另一种选择是使用右上角的$E链接将完整记录传递到控制台。之后,您可以在控制台上与记录进行交互,例如做一个$E.get('testCaseRun.id')

顺便说一句:如果模型名称与反斜线属性名称匹配,则无需在关系定义中显式声明模型名称。因此testCaseRun: DS.belongsTo('test-case-run')testCaseRun: DS.belongsTo()相同。


0
投票

尝试声明具有不带's'的型号名称的hasMany关系>

testCaseRunLogs: DS.hasMany('test-case-run-log')

0
投票

最后,我找到了问题的答案。

© www.soinside.com 2019 - 2024. All rights reserved.