Mam aplikację dla klienta. Oprócz normalnych funkcjonalności potrzebne są też dla managerów raporty / podsumowania. I tu mam zagwozdkę jak to zrobić, żeby to było po rails-owemu.
Jak potrzebny był raport to dodałem do kontrolera parametr np ?summary, który jeśli był w adresie to kontroler wybierał odpowiednie działanie. I np. zamiast listy rzeczy przekazywał do widoku pogrupowane rzeczy. W widoku też trzeba było zmienić sposób wyświetlania w zależności od parametru. To generalnie działało, ale problem jest, że ilość raportów wzrasta i zaczyna być niezły chaos. Po za tym “trochę” komplikuje się sprawa dostępu do raportów dla pozostałych użytkowników.
Np. Aplikacja księgarnia.
Jest Użytkownik, Autor, Książka.
- Chciałbym raport ile dany użytkownik kupił książek
- Jaki Autor się najlepiej się sprzedawał
- Jaki Autor się najlepiej się sprzedawał z podziałem na rodzaj abonamentu Użytkownika (premium / normalna)
- Sprzedaż Książek wg Autora
- Sprzedaż Książek wg Użytkownika
I teraz pytanie czy lepiej jest:
- Zostawić tak jak jest? (parametry w adresie)
- Stworzyć osobne kontrolery dla każdego z raportów
- Jakieś inne rozwiązanie na które nie wpadłem?
A zrobić osobny namespace w postaci reports i tam zrobić osobno choćby i sto różnych kontrolerów/akcji dla poszczególnych raportów? np.:
reports/best_selling_books
reports/best_selling_books/week/
reports/best_selling_books/month/
reports/best_selling_books/by_author
reports/number_of_books_bought_by_user (plus przekazanie w paramsach id usera)
ew. zrobienie ogólnego reports/best_selling_books i przekazywanie w paramsach okresu czasu, autora itp. (w razie braku danej wartości w paramsach ustawianie wartości domyślnej np. od początku istnienia firmy i każdy autor)
Nie znam całej sytuacji, więc warto się dobrze zastanowić - może ktoś podrzuci inne/lepsze rozwiązanie.
Osobne akcje/widoki w tym wypadku powinny w miarę proste, część będzie można użyć na zasadzie kopiuj/wklej i tylko dostosować do konkretnej sytuacji. Mi osobiście bardziej się podoba zrobienie wielu prostych akcji zamiast się ‘zaifować’ na podstawie paramsów, a potem dostosowywać kolejnymi ifami widoki.
A odnośnie dostępu dla menedżerów, to można chociażby użytkownikom dać dodatkową rolę manager i zrobić jakiś reports controller z before action authorize manager, po którym będą dziedziczyły poszczególne kontrolery.
No właśnie tak wydaje mi się najbardziej logiczne. Tyle że nie mam dużego doświadczenia i myślałem, że może są jakieś funkcjonalności, których jeszcze nie odkryłem