繁体   English   中英

具有嵌入式ID和侧载的Ember-Data和Active Model Serializer的has_many配置

[英]has_many configuration for Ember-Data and Active Model Serializers with embedded IDs and sideloading

我知道Ember-Data应该与设计的Active Model Serializer兼容,但它们似乎与序列化嵌入式ID的has_many关系不合时宜。

例如,序列化器

class PostSerializer < ActiveModel::Serializer
  embed :ids
  has_many :comments
end

生成JSON

{
    "post": {
        "comment_ids": [...]
    }
}

但是Ember Data中的默认配置,

App.Post = DS.Model.extend({
  DS.hasMany('App.Comment'),
});

App.Comment = DS.Model.extend();

期望注释关联序列化为comments: [...]没有_ids后缀(请参阅Ember.js指南的REST适配器部分的关系子部分 )。

我尝试了以下作为解决方法:

class PostSerializer < ActiveModel::Serializer
  attribute :comments
  def comments
    object.comment_ids
  end
end

它可以工作,但添加embed :ids, :include => true以便启用侧载现在什么都不做,因为AMS不知道它是一个关联。

编辑:我正在使用active_model_serializers (0.6.0) gem和Ember-Data修订版11

对于ember-data 1.0.0-beta.3,我最终使用了这个:

App.ApplicationSerializer = DS.ActiveModelSerializer.extend({});

如此处所述: 过渡指南

工作得非常好!

您可以尝试在客户端配置适配器中的正确映射

DS.RESTAdapter.map('App.Post', { comments: { keyName: 'comment_ids' } });

我正在使用active_model_serializers 0.6.0和ember_data 11.我没有看到你报告的行为。

我的序列化器:

class CentreSerializer < ActiveModel::Serializer
  embed :ids

  attributes :id, :name
  has_many :rooms
end

localhost:3000 / centers / 1.json的输出

{
  centre: {
    id: 1,
    name: "Centre0",
    rooms: [
      1,
      2,
      3,
      4,
      5
    ]
  }
}

在我的情况下,rails应用程序正在生成正确形成的json,甚至在它变成余烬之前。 您不必在客户端使用映射。

看来这个提交是造成这种情况的原因。 当更新AMS以将has_one关联序列化为association_id (使AMS符合ember-data)时,还修改了将belongs_to关联序列化为association_ids

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM