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'); 
}); 
}