2015-07-23 1 views
0

Я спрашиваю об этом, потому что это заставляет меня думать, что я не должен делать что-то «угловатое», потому что мой код излишне сложный.

Я определил ресурс

Question = $resource("https://stackoverflow.com/questions/:id", {id: "@id"}); 

теперь, если я

Question.get(1); 

Это пойдет на/вопросы/1 и ожидать, что объект как ответ Если я

Question.query({id: 1}); 

Он пойдет в/questions/1, но ожидает массив как ответ

Я понимаю, почему он делает это из-за настройки по умолчанию isArray.

У меня есть код на стороне клиента, который я не знаю, сколько идентификаторов будет запрашиваться. я могу легко обойти эту проблему, имея мой угловой код сделать

if (ids.length == 1) 
    Question.get(ids); 
else 
    Question.query({id: ids}) 

и имеющий мой сервер отправить объект, когда длина массива 1, но это кажется слишком сложным, и заставляет меня думать, что я должен идти об этом неправильно путь.

Есть ли более чистое решение?

+0

вы можете создать скрипку, пожалуйста? – messerbill

ответ

0

Не уверен, что это угловой способ, но решение, к которому я пришел, было немного чище, заключалось в том, чтобы использовать разные параметры в моем запросе, чтобы он ударил по методу индекса на рельсах вместо показа, и поэтому может безопасно всегда возвращать массив.

Как так:

Question = $resource("https://stackoverflow.com/questions/:id", {id: "@id"}); 

q = Question.get(1); 
// Performs GET /questions/1 
// q = { id: 1, ...}; 

q = Question.query({ids: 1}); 
// Performs GET /questions?ids=1 
// q = [{id: 1, ... }]; 

q = Question.query({ids: [1,2]}); 
// Performs GET /questions?ids=1&ids=2 
// q = [{id: 1, ... }, {id: 2, ...}];