Cześć,
Jestem początkujący w Railsach i mam taki problem: Mam dwie tabele o identycznej strukturze i kontroler który z nich korzysta
potrzebuje zmieniać nazwę modelu w zależności od url. Zakładam oczywiście że urle są REST:
/palms/translations/ #<-tutaj chce móc ustawić nazwę tabeli
/translations/ #<- tu może być użyty domyślny
Fajnie byłoby także, gdyby dało się zrobić tak, aby prefix w url był zmienną, coś takiego:
map.connect(’:table_name/:controller/:action/:id’) - czy da się tak zrobić ? Wtedy prosto mógłbym sobie manipulować na podstawie tej zmiennej w kontrolerze.
Wiem, że mógłbym stworzyć dla tej drugiej tabeli drugi kontroler, ale wtedy miałbym kod kontrolera, widoków i modeli powielony…
Tak to działa, ale jest to niezadowalające: metody wypisujące url’e nie współpracują z tym schematem:
jeśli wejde na index:
/translations/
to dla poszczególnych obiektów i akcji które mogę podjąć mam:
/translations/1/edit
/translations/1/destroy
/translations/1/update
/translations/2/edit
itd…
jeśli teraz chcę operować na drugim modelu wchodze na index:
/palm/translations/
faktycznie index pokazuje obiekty z tabeli do której się przełączyłem, ale niestety wszystkie urle są wygenerowane po staremu tj.
/translations/1/edit
…
a powinno przecież być:
/palm/translations/1/edit aby można było dokonać edycji elementu o id 1 z drugiej tabeli.
Mam nadzieje że to rozjaśniło problem z którym walcze.
Musisz w view ustawiać odpowiednią wartość :table dla wszystkich linków. Jeżeli zrobisz linka po prostu do kontrolera translations to zawsze wykorzysta domyślny routing /translations. Dlatego musisz ustawiać zawsze link z np :table => “palm”, wtedy przekieruje do /palm/translations.
Może jest jakiś inny sposób, ale ja bym zrobił to tak jak powiedziałem.