アプリケーションでユーザーと会話の間に多対多の関係があります
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 になります。
それで、それを機能させる方法はありますか?