2016-11-30 3 views
0

ich einen User und eine Nachricht Modell haben, die wie folgt aussehen:Ember Datenbeziehungen Darstellungen - erstellen Datensatz nicht funktioniert

//models/user.js

export default DS.Model.extend({ 
    name: DS.attr('string'), 
}); 

//models/message.js

export default DS.Model.extend({ 
    body: DS.attr('string'), 
    sender: DS.belongsTo('user', { inverse: null }), 
    receiver: DS.belongsTo('user', { inverse: null }), 
    user: DS.belongsTo('user') 
}); 

Hier ist, wie die Nachrichten/Nachrichtenroute wie folgt aussieht:

// Nachrichten/message/route. js

export default Ember.Route.extend({ 
model(params) { 
    return Ember.RSVP.hash({ 
     messages: this.store.query('message', { filter: {user: params.user} }), 
     user: this.store.findRecord('user', params.user), 
    }); 
    }, 

    setupController(controller, models) { 
    controller.set('messages', models.messages); 
    controller.set('user', models.user); 
    } 
}); 

und in den router.js I

this.route('messages', function() { 
    this.route('message', { path: ':user' }); 
}); 

haben also im Grunde, wenn Sie /messages/{user_id} gehen, können Sie alle Nachrichten sehen den aktuellen Benutzer mit dem ein Benutzer hat, der die {user_id} hat . Hier ist eine JSON Antwort, die ich von dem Server erhalten, wenn Besuch messages/5

{ 
"messages": [ 
    { 
    "id": 10, 
    "sender": 1, 
    "receiver": 5, 
    "body": "Hello world!", 
    "user": 5 
    }, 
    { 
    "id": 7, 
    "sender": 1, 
    "receiver": 5, 
    "body": "Sorry, I don't get it!", 
    "user": 5 
    }, 
    { 
    "id": 6, 
    "sender": 5, 
    "receiver": 1, 
    "body": "Is it possible?", 
    "user": 5 
    } 
] 

}

Nun, wenn eine neue Nachricht zu erstellen versuchen, gibt es keine Sender, Empfänger oder Benutzer-IDs den neuen Datensatz zu assoziieren mit geschaffen, um um diese an den Server zu senden.

Hier ist, was ich in der Nutzlast haben

{ 
    "body":"New message", 
    "sender":null, 
    "receiver":null, 
    "user":null 
} 

Es ist klar, dass ich etwas falsch mit den Beziehungen mache und nicht sicher, wie diese zu behandeln.

// bearbeiten

Hier ist, wie ich die Nachricht Schöpfung umgehen:

actions: { 
    sendMessage() { 
     const flashMessages = Ember.get(this, 'flashMessages'); 
     this.store.createRecord('message', { 
      body: this.get('message'), 
      sender: this.get('currentUser.id'), 
      user: this.get('user.id'), 
     }).save().then(() => { 
      flashMessages.success('Message sent!', { 
       timeout: 2000, 
       destroyOnClick: true 
      }); 
     }); 
    }, 
} 
+0

Wie Sie eine neue Nachricht erstellen? Können Sie den Code dafür posten? – Serge

+0

Ich habe gerade das OP bearbeitet, um die 'sendMessage()' Aktion einzubinden – Sabin

Antwort

1

In Ihrem Nachrichtenmodell, sender, user und receiver sind alle Beziehungen, so glut-Daten Benutzerobjekte zu erwarten. Sie geben nur IDs in Ihrer sendMessage Aktion.

Ich glaube, es gibt zwei Möglichkeiten, dies zu beheben: 1

#: Verwenden Sie die IDs

# 2: Verwenden Sie die Objekte

Beispiel # 1:

actions: { 
    sendMessage() { 
     const flashMessages = Ember.get(this, 'flashMessages'); 
     this.store.createRecord('message', { 
      body: this.get('message'), 
      senderId: this.get('currentUser.id'), 
      userId: this.get('user.id'), 
     }).save().then(() => { 
      flashMessages.success('Message sent!', { 
       timeout: 2000, 
       destroyOnClick: true 
      }); 
     }); 
    }, 
} 

Beispiel # 2:

actions: { 
    sendMessage() { 
     const flashMessages = Ember.get(this, 'flashMessages'); 
     this.store.createRecord('message', { 
      body: this.get('message'), 
      sender: this.get('currentUser'), 
      user: this.get('user'), 
     }).save().then(() => { 
      flashMessages.success('Message sent!', { 
       timeout: 2000, 
       destroyOnClick: true 
      }); 
     }); 
    }, 
} 

Einer oder beide sollten Sie aus Ihrem aktuellen Jam befreien.

+0

Danke Kori, mit dem Beispiel # 2 tat es :) – Sabin

+0

Gern geschehen. Glücklich es hat für dich gearbeitet! –

Verwandte Themen