0

アプリケーションでユーザーと会話の間に多対多の関係があります

App.User = DS.Model.extend,
  conversations: DS.hasMany('App.Conversation')    

App.Conversation = DS.Model.extend
  participants: DS.hasMany('App.User')

しかし、会話を作成して保存するたびに、ember は関連する会話の ID を含む各参加者を保存しようとします。しかし、私はそれとは正反対のことを望んでいます。その1つの会話だけを更新し、関連するparticipant_idsを送信したいのです。

それを機能させる方法はありますか?

私がこれまでに試したこと:

  • ユーザーモデルに逆キーを指定する ( conversations: DS.hasMany('App.Conversation', inverse: 'participants'))
  • 以下の回避策。

.

App.RESTAdapter = DS.RESTAdapter.extend

  serializer: DS.RESTSerializer.extend
    addHasMany: (hash, record, key, relationship) ->
      type = record.constructor
      name = relationship.key
      serializedHasMany = []

      embeddedType = this.embeddedType(type, name)
      return unless embeddedType is 'always'

      record.get(name).forEach (record) ->
        serializedHasMany.push record.get('id')
      , @

      hash[@singularize(key) + '_ids'] = serializedHasMany

App.RESTAdapter.map 'D4S.Conversation',
  participants:
    embedded: 'always'

その後、外部キーを含む会話を保存しますが、ユーザーを更新しようとするので、カスタムリクエストで保存して、参加者の状態をリセットしようとしました:/

    App.Conversation._createWith = (participants) ->
      conversation = @createRecord()

      participants.forEach (p) ->
        conversation.get('participants').addObject(p)

      # conversation.save()
      adapter = conversation.get('store._adapter')
      adapter.ajax(adapter.buildURL('conversation'), 'POST',
        data: { conversation: conversation.serialize() }
      ).then ->
        conversation.setProperties(arguments[0].conversation)
        conversation.get('stateManager').transitionTo('saved')
        conversation.get('participants').forEach (user) ->
          user.get('stateManager').transitionTo('saved')
        conversation.trigger('didCommit')

      conversation

これは最終的に機能しました\o/しかし、次のエラーをスローします:(

ember を読み込むと関係が読み込まれず、会話の参加者プロパティは常に空の DS.ManyArray になります。

それで、それを機能させる方法はありますか?

4

1 に答える 1