Routing i Modele

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

Problem w tym, że jak w routes.rb wpisze:

map.connect(’/palm/:controller/:action/:id’)
map.connect(’:controller/:action/:id’)

to nie za bardzo chce to działać.

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…

Z góry dzięki za pomoc

Co za pytanie? Wystarczy sprawdzić czy się tak da.

map.connect ':controller/:action/:id' map.connect ':table/:controller/:action/:id'
I sprawdzamy (odpalamy script/console):

[code]>> rs = ActionController::Routing::Routes

rs. recognize_path “/calendar/”
=> {:action=>“index”, :controller=>“calendar”}
rs. recognize_path “/calendar/show”
=> {:action=>“show”, :controller=>“calendar”}
rs. recognize_path “palm/calendar/show”
rs. recognize_path “/palm/calendar/show”
=> {:action=>“show”, :controller=>“calendar”, :table=>“palm”}
rs. recognize_path “/palm/calendar/”
=> {:action=>“index”, :controller=>“calendar”, :table=>“palm”}[/code]

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.

Może named routes będzie rozwiązaniem? http://wiki.rubyonrails.org/rails/pages/NamedRoutes