Cześć,
Jako że ember(cli) jest chyba jednym z najczęściej używanych frameworków SPA, do frontend’u rails, zakładam że jest tu trochę masterów którzy będą w stanie mi to wytłumaczyć. (To forum tez jest zrobione w ember). Na początku dodam że się dopiero uczę embera.
API jest napisane w rails, do czego użyłem gemów grape, grape-entity całe API wygląda bardzo fajnie, i jest udokumentowane. Jak wiemy w railsach są tak zwane nested resources. I załóżmy że mam model kategorii i produktów, powiązanych has_many, belongs_to. Czyli jeśli chcę pobrać wszystkie produkty z danej kategorii to moja trasa do API wygląda tak: ‘/api/v1/categories/:category_id/products’. Do tego paginate ale to tylko taki szczegół. W emberze mam router tak skonfigurowany.
export default Router.map(function() {
this.resource('categories', function() {
this.resource('category', {path: ':category_id'},function(){
this.resource('products', {path: 'products'},function(){});
})
});
});
Oczywiście w modelach są porobione relacje, i async: true.
Ok wszystko ładnie działa, ale powiedzmy że chcę przejść do trasy ‘categories/1/products’. Pomimo tego że się dopiero uczę embera, to takie rozwiązanie jest moim zdaniem bardzo nieprofesjonalne, bo pierw pobierane są wszystkie kategorie - ember dzwoni pod ‘/api/v1/categories’ następnie ‘/api/v1/products’, potem wybiera on sobie model id: 1. Ok fajnie to działa powiedzmy dla 100 rekordów, ale przy ok 5000 to będzie sieczka… Nie chodzi tu już o sam czas, ale API jest po to żeby to powiązać po stronie serwera + paginate, po co zwracać wszystkie rekordy? I tutaj mam pytanie jak to zrobić żeby ember dzwonił pod ‘/api/v1/categories/1/products’ wiem że można wykorzystać Ajaxa z ember, ale czy nie da się tego zrobić jakoś bardziej profesjonalnie? Można to zrobić za pomocą queryParams czyli “/api/v1/products?category_id=1” Ale od tego jest nested resources… Co o tym myślicie?
Wiem że to troszkę dziwnie wytłumaczone, ale jeśli ktoś ogarnia o co mi biega, i wie jak to rozwiązać, żeby ember wykorzystywał nested resources z API to dziękuję za odp. Może macie jakąś apke napisaną, i wrzuconą na git którą moglibyście pokazać jak wy to robicie
Pozdrawiam,
Marcin