0

私は最初の rails/ember アプリを作成しており、チュートリアルや ember のドキュメントからさまざまな情報源を調べています。しかし、私は壁にぶち当たり、何度も掘り下げた後も、探している答えを見つけることができません。現在、インデックスページがリレーションシップであり、リレーションシップには多くの受信者がいる GiftList Rails/Ember アプリを構築しています。現在、リレーションシップが表示されており、各リレーションシップの受信者の数を表示したいのですが、実際にはリレーションシップの少なくとも 1 つに受信者が 1 人いる場合 (家族には 1 つのレコードがあります)、各リレーションシップは 0 と表示されます。Ember インスペクタでデータを確認すると、GiftList.Recipient には 1 つのレコードがあり、GiftList.Relationship には 4 つのレコードがあります。正しい数の受信者レコードを正しく表示するにはどうすればよいですか?

ルート

Router.js.coffee:

GiftList.Router.map ->
  @resource 'relationships', { path: '/' }, ->
    @resource 'relationship', { path: ':relationship_id' }, ->
      @resource 'recipients', { path: 'recipients' }, ->
        @resource 'recipient', { path: ':recipient_id'}

Relationship_route.js.coffee:

GiftList.RelationshipsRoute = Ember.Route.extend
  model: ->
    @store.find('relationship')

recipients_route.js.coffee:

GiftList.RecipientsRoute = Ember.Route.extend
  model: ->
    @store.find('recipient')

コントローラー

Relationship_controller.js.coffee:

GiftList.RelationshipsController = Ember.ArrayController.extend({})

relationship_controller.js.coffee:

GiftList.RelationshipController = Ember.ArrayController.extend
  recipients: GiftList.Recipient.find()

モデル

関係.js.コーヒー:

GiftList.Relationship = DS.Model.extend
  name: DS.attr('string')
  recipients: DS.hasMany('recipient')

受信者.js.コーヒー:

GiftList.Recipient = DS.Model.extend
  first_name: DS.attr('string')
  last_name: DS.attr('string')
  relationship: DS.belongsTo('relationship')

テンプレート

関係.ハンドルバー:

<h2>Relationships</h2>
  <ul id="relationships">
    {{#each}}
      <li>{{name}}({{recipients.length}})</li>
    {{/each}}
  </ul>

*アップデート***

シリアライザー

class RecipientSerializer < ActiveModel::Serializer
  embed :id
  attributes :id, :first_name, :last_name
  has_one :relationship, key: :relationship

end

class RelationshipSerializer < ActiveModel::Serializer
  embed :ids, include: true
  attributes :id, :name
  has_many :recipients, key: :recipients

end

他のすべてのコードは同じままでした

4

1 に答える 1

0

ember-data ベータ ビルドを使用していると仮定します。古いバージョンを使用している場合、この回答は当てはまりません。

取得したいのが特定の関係の受信者である場合、すべての関係とすべての受信者を取得しています。親モデルに hasMany リレーションをサイドロード レコードとして埋め込みたくない場合は、リレーションシップを非同期として宣言する必要があります。

GiftList.Relationship = DS.Model.extend
  name: DS.attr('string')
  recipients: DS.hasMany('recipient', { async: true })

次に、関係の受信者を取得する必要があります。

GiftList.RecipientsRoute = Ember.Route.extend
  model: ->
    @modelFor('relationship').get('recipients')

これは、/relationships/:id/recipients への非同期呼び出しを行い、関係モデルにまだロードされていない非同期 hasMany プロパティを要求するため、関係の受信者を取得します。

于 2014-02-28T20:22:15.913 に答える