在我的应用程序路由中,我获得了当前会话和用户。
/routes/application.js
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel: function() {
return this.get('session').fetch().catch(function() {});
},
model () {
return this.store.findRecord('user', this.get('session.currentUser.uid'));
}
});
我的模型设置如下:
/models/bet.js
import DS from 'ember-data';
export default DS.Model.extend({
created: DS.attr('date'),
user: DS.belongsTo('user', { async: false })
});
/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
email: DS.attr('string'),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
bets: DS.hasMany('bet', { async: true })
});
在我/ bets路线中,我只想加载user == session.currentUser.uid
或类似方式的投注,只获得当前用户bets
的{{1}}。
我已经尝试找到没有结果的最佳方法。
答案 0 :(得分:1)
niave方法是将所有赌注过滤为您想要的赌注。基于api的解决方案可以是1)在对服务器的请求上使用查询参数,2)嵌套的URL如/users/2/bets
。在任何一种情况下,您都必须在服务器上实现此功能。
示例1)过滤器
import Ember from 'ember';
export default Ember.Route.extend({
model () {
return this.store.findAll('bet').then((bets) => {
const currentUserId = this.get('session.currentUser.uid')
return bets.filter((bet) => {
return bet.get('user.id') === currentUserId
})
});
}
});
示例2)查询。您的服务器必须使用res
import Ember from 'ember';
export default Ember.Route.extend({
model () {
return this.store.query('bet', {
userId: this.get('session.currentUser.uid')
})
}
});
示例3)嵌套属性。 为此,您需要做两件事:
links
属性,如下所示:`{bets:' api / users /:uid / bets'} /api/users/:uid/bets
并仅返回用户的投注代码:
import Ember from 'ember';
export default Ember.Route.extend({
model () {
const currentUser this.store.peekRecord('user', this.get('session.currentUser.uid'))
return currentUser.get('bets') // sends request to `api/users/:uid/bets`
}
});
答案 1 :(得分:0)
您使用的是Ember Simple Auth吗?如果是这样,您的请求将发送令牌,该令牌可用于根据提供的信息获取当前用户。由于仅返回当前用户的下注是默认行为,因此最好将逻辑保留在api端。任何其他类型的过滤器都应该使用query或queryRecord方法完成。