Witajcie,
Doradźcie, proszę, jak zorganizować aplikację.
Mam 3 kategorie dokumentów, które nie różnią się modelem danych, a tylko pewnymi pozycjami słownikowymi, specyficznymi dla każdej kategorii.
Różne kategorie dokumentów są “obsługiwane” przez różnych użytkowników, zatem chcę mieć w menu:
- Dokumenty Kategorii A,
- Dokumenty Kategorii B,
- Dokumenty Kategorii C,
po wybraniu których de facto będzie nakładany filtr
scope :only_cat_a, -> { where(category: "A") }
scope :only_cat_b, -> { where(category: "B") }
scope :only_cat_c, -> { where(category: "C") }
Chciałbym jednak, by User, który wybierze przykładową pozycję w menu “Dokumenty Kategorii A” nie pitolił się już później w określanie kategorii przy operacjach “new” i by odpowiednia zawartość słowników pojawiała się na formularzach.
Podpowiedzcie proszę, czy dobrym pomysłem jest stworzenie 3 kontrolerów (i odpowiednich ścieżek w route.rb), w których będę wywoływał ten sam formularz z odpowiednim parametrem locals …coś w stylu:
def new
...
respond_to do |format|
format.html { render :new, locals: { category: "A"} }
end
end
lub nawet
kontroler A
def new
...
respond_to do |format|
format.html { render :new_form_a }
end
end
kontroler B
def new
...
respond_to do |format|
format.html { render :new_form_b }
end
end
czy lepszym jest jeden kontroler i przekazywanie dodatkowego parametru w ścieżce wywołania … coś w stylu:
/documents?category=A
/documents/new?category=A
a później przesyłanie tego parametru do formularzy i z formularzy do kontrolera i w zależności od wartości parametru dobieranie odpowiednich słowników?
Drugi sposób wydaje się prostszy w implementacji, ale czy jest elegancki, poprawny i bezpieczny?
Podpowiedzcie, proszę, którą drogę wybrać.