从Ember客户端的{Rails API}中检索数据

时间:2017-01-14 04:51:17

标签: ruby-on-rails json api ember.js

我有一个Rails api,我想渲染到Ember应用程序。我有一个看起来像

的问题模型

从'ember-data'导入DS;

export default DS.Model.extend({
  body: DS.attr('string'),
  response: DS.attr('string')
});

api可以在api / v1 / questions.json url上呈现一堆问题。我想抓住这些数据在ember中使用。在我的路径文件夹中,我有命名空间索引和随机。我的随机路线返回一个随机问题,当我转到问题/随机路线时效果很好:

从'ember'导入Ember;

export default Ember.Route.extend({
  model() {
    return this.store.findRecord('question', 'random.json');
  }
});

在我正在运行Rails服务器的终端中,应用程序以

的身份启动GET请求
Started GET "/api/v1/questions/random.json" for 127.0.0.1

我以类似的方式设置了我的索引路线,但这次我回复了一系列问题

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return this.store.findAll('question', 'questions.json');
  }
});

在我正在运行Rails服务器的终端中,呼叫以

进入
Started GET "/api/v1/questions" for 127.0.0.1

我期待它是/api/v1/questions.json,但事实并非如此。没有数据被提取。我已经看了一下ember文档并尝试了findRecord,peekAll等的变体。我正在请求(或想要返回给我)的数据是问题对象的集合,但不是所有的对象来自API。

我想知道为什么我指定的.json部分没有在我的api电话中发送。

1 个答案:

答案 0 :(得分:1)

findRecord方法接受模型名称的参数和要从API检索的对象的id。然后将它们组合起来构建一个url,以便在你打电话时:

this.store.findRecord('question', 'random.json')

'问题'在网址中复数,并附加'random.json',从而产生您看到的获取请求:

Started GET "/api/v1/questions/random.json" for 127.0.0.1

findAll方法只接受一个模型名称(因为它不需要该模型的所有对象,所以当你打电话时:

this.store.findAll('question', 'questions.json');

它只是复数模型名称并忽略导致get请求的第二个参数:

Started GET "/api/v1/questions" for 127.0.0.1

这是常见的RESTful principles for URLs。如果您想自定义Ember如何为特定模型或所有模型构建URL,您应该查看DS.Adapter class

如果您只想查询记录子集,还应该查看商店的query方法。

编辑: 由于您使用的是DS.RESTAdapter,因此您可以覆盖urlForFindAll或任何其他urlFor方法来自定义网址路径。