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

ライアンが言及した埋め込みIDは機能しますが、organized_byがorganized_biesになるなどの変曲に問題がある可能性があり、それを修正するために両側を構成する必要があります。この問題を修正するために必要な JS コードは次のとおりです。

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