6

我有一个简单的活动模型序列化器:

class ActivitySerializer < ActiveModel::Serializer
  attributes :id, :title, :description, :time
  has_one :category
  has_one :user
end

我也有类别和用户序列化程序,它们按预期工作。我得到这个有效载荷:

{"activities":[{"id":1,"title":"Test Activity","description":null,"time":"2014-03-01T06:05:41.027Z","category":{"id":1,"title":"Sports"},"user":{"id":1,"name":"ember"}}]}

但是,它们似乎没有加载到 ember 中。

App.Activity = DS.Model.extend
  title: DS.attr('string')
  description: DS.attr('string')
  time: DS.attr('date')
  category: DS.belongsTo('category')
  user: DS.belongsTo('user')

App.Category = DS.Model.extend
  title: DS.attr('string')
  activities: DS.hasMany('activity')

App.User = DS.Model.extend
  name: DS.attr('string')
  activities: DS.hasMany('activity')

当我检查 ember 检查器时,未加载数据。ActiveModelSerializer 期望什么样的格式?它加载一个活动,但不加载类别或用户属性。

4

2 回答 2

7

这个技巧花了我一点时间在网上找到,我的模型需要包含embed :ids.

class ActivitySerializer < ActiveModel::Serializer
  embed :ids, include: true

  attributes :id, :title, :description, :time
  has_one :category
  has_one :user
end

或者,你可以做一些类似的事情,但没有承诺我从未测试过这段代码。

App.ActivitySerializer = DS.ActiveModelSerializer.extend DS.EmbeddedRecordsMixin,
  attrs:
    user: {embedded: 'always'}
    category: {embedded: 'always'}


App.ApplicationAdapter = DS.ActiveModelAdapter.extend
  defaultSerializer: 'DS/app'
于 2014-02-25T16:43:03.403 回答
3

Ryan 提到的嵌入 id 有效,但是您可能会遇到一些变形问题,例如 Organize_by 变成了 Organized_bies,然后您必须配置双方来纠正它。解决此问题所需的 JS 代码是:

DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: { category: {embedded: 'always'} }
});
于 2014-04-07T19:25:26.177 回答