在我的应用程序路由中,我获得了当前会话和用户。
/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
。我尝试过找到没有结果的最佳方法。
最佳答案
niave方法是将所有投注过滤为您想要的投注。基于api的解决方案可能是1)对服务器的请求使用查询参数,2)像/users/2/bets
这样的嵌套url。无论哪种情况,您都必须在服务器上实现。
示例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)查询。您的服务器将必须使用资源
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`
}
});