2014-08-30 46 views
0

假设我想让网址为/users/JoshSmith以实现最大的可读性/可共享性。Ember:仅使用ID以外的内容返回一条记录

设置我Router

this.resource('user', path: '/users/:username')

我的路线:

var UserRoute = Ember.Route.extend({ 
    model: function(params) { 
    debugger 
    return this.store.find('user', { username: params.username }); 
    } 
}); 

但这findQuery函数实际上返回数组,因为它调用/users?username=而不是调用/users/:username就像我会通常这样做。

我有点失落,我应该如何处理这个;我假设有一个公约,我找不到它。

+0

您的slu guaranteed子保证是独一无二的吗?如果是这样,只需使用它们作为'id'。如果不是,那么返回的集合可能是合适的。 – 2014-08-31 01:35:08

+0

将Ember混淆用户名和ID?就像计算关系时一样?你只是用'this.resource('user',路径:'/ users /:username')来表示'this.store.find('user',params.username)''? – 2014-08-31 03:13:10

回答

0

由于这里建议:http://discuss.emberjs.com/t/find-by-different-property/2479

只是覆盖系列化你的路线上。

var UserRoute = Ember.Route.extend({ 
    model: function(params) { 
    return this.store.find('user', { username: params.username }); 
    }, 
    serialize: function(model) { 
    return { username: model.get('username') }; 
    } 
}); 

这取代,看起来像这样的默认:

serialize: function(model) { 
    // this will make the URL `/posts/12` 
    return { post_id: model.id }; 
} 

来源:http://emberjs.com/api/classes/Ember.Route.html#method_serialize

0

我有同样的问题,以及,findQuery总是返回记录阵列。我解决这个问题的方法是将我的model钩子更改为

model: function(params) { 
return this.store.find('user', { username: params.username }).then(function(users) { 
    return users.get('firstObject'); 
}); 
}