ember-cli 1.13.8
ember-data 1.13.11
ActiveModelAdapter
我有两个对象:帖子和用户。我在个人帖子页面上有一个操作,允许用户观看/关注帖子。
//post model js
watchedUsers: DS.hasMany('user', { inverse: 'watchedPosts', async: true });
//user model js
watchedPosts: DS.hasMany('post', {inverse: 'watchedUsers', async: true });
//action after clicking button
action: {
addToWatchlist(post) {
//session.current user is declared in an initializer that lets us access the current user easily
post.get('watchedUsers').pushObject(this.get('session.currentUser'));
post.save().then(function() {
console.log('post save success');
}, function() {
console.log('post save fail');
}
}
}
在点击跟随按钮后的ember检查器中,我看到postched模型更新的属性watchedUsers,以及用户模型更新的watchedPosts。刷新时,值会消失。有了这个,我认为pushObject函数本身很好。
查看我的后端的PUT
请求以保存帖子模型时,它不包含watched_user_ids
的json条目。 (所以它没有被保存,呃)我相信这是我的主要问题。
我在我的rails后端播种了数据,我可以在ember端看到/访问,所以我知道json可以通过一种方式访问。 ember-data不支持多对多吗?有什么特别的东西要发送/保存json用于多对多的关系吗?
答案 0 :(得分:0)
我能够解决这个问题,但是在Post和User中间使用了一个'watchlist'对象来表示他们的多对多关系。后端/轨道侧面完成了多对多:通过,而不是有和属于许多。似乎Ember Data不会为HasMany属性发送json,这是我的主要问题。
这是最终解决方案的样子:
//models/user.js
export default DS.Model.extend({
watchlists: DS.hasMany('watchlist', { async: true })
});
//models/post.js
export default DS.Model.extend({
watchlists: DS.hasMany('watchlist', { async: true })
});
//models/watchlists.js
export default DS.Model.extend({
user: DS.belongsTo('user', { async: true }),
listing: DS.belongsTo('listing', { async: true }),
});
//action in a route.js
actions: {
addToWatchlist(post) { //component sends the specific post using sendAction
var newWatchlist = this.store.createRecord('watchlist', {
user: this.get('session.currentUser'), //current user stored in session object
post: post
});
newWatchlist.save();
}
}