[quote=Animus]map.connect 'account/:id', :controller => 'account', :action=>'show'
Efekt osiągnięty, jednak jednocześnie przestały działać linki rjs tworzone poprzez link_to_remote, przykładowo:
[/quote]
Jest tak dlatego, że definicja ‘account/:id’ pasuje tak samo do ‘/account/71’ jak i ‘/account/logout’ czy ‘/account/dupa’. Dodaj warunki bardziej precyzujące czym jest ów ciąg znaków przypisywany do zmiennej id. Np. jeśli ma tam być tylko liczba, to spróbuj:
Z tym ze rails nie powinno w zaden sposob skojarzyc tutaj :id, skoro on go nie podal, prawda ? A mimo to rails skojarzylo :id i na dodatek ustawilo je na “logout”, natomiast :action ustawilo na ‘show’ pomimo ze wyraznie widac w kodzie :action=>‘logout’. Animus, jakiego rails uzywasz?
Nieprawda. Nie ma czegoś takiego jak :id. Równie dobrze może wpisać :dupa. To jest tylko informacja jaką zmienną tworzyć podczas rozpoznawania URL’a. Generator URL w RJS działa poprawnie. To czy regułę zdefiniujesz jako ‘account/:id’ czy ‘accunt/:fake’ działa identycznie jeśli chodzi o rozpoznawanie URL. W miejsce :id czy :fake można w URL wstawić absolutnie dowolny ciąg znaków. Będzie on wciągnięty do zmiennej params[:id] lub params[:fake]. To jedyna różnica.
Dla config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.connect 'account/:id', :controller => 'account', :action => 'show'
map.connect ':controller/:action/:id.:format'
map.connect ':controller/:action/:id'
end
mała sesja w konsoli