无效的fullName:`model:@ each`,必须是`type:name`形式

one*_*nch 5 ruby-on-rails ember.js

我在本教程之后使用Ember CLI和Rails后端设置了一个新的应用程序但是当我为我的某个模型设置路由时,我收到以下错误:

Error while processing route: inks.index Invalid fullName: `model:@each`, must be of the form `type:name`  TypeError: Invalid fullName: `model:@each`, must be of the form `type:name` 
at __exports__.default.EmberObject.extend.resolve (http://localhost:4200/assets/vendor.js:16772:17)
at Object.resolve [as resolver] (http://localhost:4200/assets/vendor.js:16394:25)
at resolve (http://localhost:4200/assets/vendor.js:14930:32)
at Object.Container.resolve (http://localhost:4200/assets/vendor.js:14510:16)
at factoryFor (http://localhost:4200/assets/vendor.js:15013:31)
at Object.Container.lookupFactory (http://localhost:4200/assets/vendor.js:14617:16)
at Ember.Object.extend.modelFactoryFor (http://localhost:4200/assets/vendor.js:74810:31)
at JSONSerializer.extend.extractArray (http://localhost:4200/assets/vendor.js:67710:22)
at apply (http://localhost:4200/assets/vendor.js:32851:27)
at superWrapper (http://localhost:4200/assets/vendor.js:32419:15) 
Run Code Online (Sandbox Code Playgroud)

我用Google搜索,但我不知道它甚至意味着什么.我已经检查过以确保我有ActiveModelAdapter和Serializer.该模型并不复杂:

我的路线是app/routes/users/index.js:

import Ember from 'ember';

export default Ember.Route.extend({
 model: function() {
    return this.store.find('user'); 
 }
});
Run Code Online (Sandbox Code Playgroud)

app/router.js:

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.resource('users');
});
export default Router;
Run Code Online (Sandbox Code Playgroud)

而我的app/adapters/application.js是:

import DS from 'ember-data';

export default DS.ActiveModelAdapter.extend({
    namespace: 'api/v1'
});
Run Code Online (Sandbox Code Playgroud)

我对EmberCLI还很新,所以我不确定在哪里看.

小智 5

我遇到了类似的问题.只有一个区别我用过rabl.

问题出在我的rabl配置上:

Rabl.configure do |config|
  config.include_json_root = false
end
Run Code Online (Sandbox Code Playgroud)

Ember.js文档告诉我们:

JSON有效负载应该是包含root属性内的记录的对象

因此,您需要将rabl配置更改为:

Rabl.configure do |config|
  config.include_json_root = true
end
Run Code Online (Sandbox Code Playgroud)

或者,rootrabl模板中传递选项:

collection @orders, root: 'orders'
Run Code Online (Sandbox Code Playgroud)


one*_*nch 2

所以事实证明我没有正确使用 ActiveModelSerializers。由于我列出所有用户作为测试,我认为它会序列化为我在 UserSerializer 中定义的序列化数据的列表。

我在我的控制器中这样做:

def index
  @users = User.all
  render json: @users
end
Run Code Online (Sandbox Code Playgroud)

当我应该根据文档(此处)执行此操作时:

def index
  @users = User.all
  render json: @users, each_serializer: UserSerializer
end
Run Code Online (Sandbox Code Playgroud)

我什至没有注意到我的序列化器没有被调用。