Ember 数据关系表示 - 创建记录不起作用
Ember Data Relationships representations - create record not working
我有一个用户模型和一个消息模型,如下所示:
//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')
});
messages/message 路线如下所示:
//messages/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);
}
});
在 router.js 我有
this.route('messages', function() {
this.route('message', { path: ':user' });
});
所以基本上当您转到 /messages/{user_id}
时,您可以查看当前用户与具有 {user_id} 的用户的所有消息。这是我在访问 messages/5
时从服务器得到的 JSON 响应
{
"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
}
]
}
现在,当尝试创建新消息时,没有发件人、收件人或用户 ID 可与创建的新记录相关联,以便将它们发送到服务器。
这是我在有效载荷中的内容
{
"body":"New message",
"sender":null,
"receiver":null,
"user":null
}
很明显我在这些关系上做错了,我不确定如何处理这些。
//编辑
以下是我处理消息创建的方式:
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
});
});
},
}
在您的消息模型中,sender
、user
和 receiver
都是关系,因此 ember-data 需要用户对象。您只是在 sendMessage
操作中给它 ID。
我相信有两种方法可以解决这个问题:
#1:使用 ID
#2:使用对象
#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
});
});
},
}
#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
});
});
},
}
其中一个或两个应该可以让您摆脱当前的困境。
我有一个用户模型和一个消息模型,如下所示:
//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')
});
messages/message 路线如下所示:
//messages/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);
}
});
在 router.js 我有
this.route('messages', function() {
this.route('message', { path: ':user' });
});
所以基本上当您转到 /messages/{user_id}
时,您可以查看当前用户与具有 {user_id} 的用户的所有消息。这是我在访问 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
}
]
}
现在,当尝试创建新消息时,没有发件人、收件人或用户 ID 可与创建的新记录相关联,以便将它们发送到服务器。
这是我在有效载荷中的内容
{
"body":"New message",
"sender":null,
"receiver":null,
"user":null
}
很明显我在这些关系上做错了,我不确定如何处理这些。
//编辑
以下是我处理消息创建的方式:
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
});
});
},
}
在您的消息模型中,sender
、user
和 receiver
都是关系,因此 ember-data 需要用户对象。您只是在 sendMessage
操作中给它 ID。
我相信有两种方法可以解决这个问题:
#1:使用 ID
#2:使用对象
#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
});
});
},
}
#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
});
});
},
}
其中一个或两个应该可以让您摆脱当前的困境。