link_to magia atrybutów

Witam mamy taka sytuacje:

rake routes …

promoted_category_stories GET /categories/:category_id/stories/promoted(.:format) category_stories GET /categories/:category_id/stories(.:format)
jesli w url wpiszemy adres:

http://host/categories/23/stories/waiting_room

i teraz w widoku posiadam

link_to 'test' {:controller => 'stories', :action => 'promoted'}

to on tworzy z tego url

http://host/categories/23/stories/waiting_room

wogule nie wiem skad on bierze category_id (znaczy wybiera bierzace ale dlaczego)

jesli jestesmy w

http://localhost:3000/categories/22/stories

to link tworzy sie poprawnie bez category_id

dla

link_to 'test' {:controller => 'stories', :action => 'index'}

http://localhost:3000/stories

Ktos wie skad sie magicznie dodaje category_id ?

Pierwsza i najważniejsza sprawa to: http://www.google.pl/search?hl=pl&q=firefox+sprawdzanie+pisowni (możesz także zamienić firefox na nazwę przeglądarki, której używasz)

Druga sprawa to sposób, w jaki tworzysz odnośniki. Polecenie “rake routes” i generowane automatycznie helpery do ścieżek istnieją po to, żeby z nich korzystać. Prawdopodobnie brakujące elementy ścieżki wyciągane są z hasza params (zgaduję). Zerknij do dokumentacji: http://api.rubyonrails.org/classes/ActionController/Routing.html albo do przewodników http://guides.rubyonrails.org/routing.html a dowiesz się znacznie więcej.

[quote=qoobaa]…
Druga sprawa to sposób, w jaki tworzysz odnośniki. Polecenie “rake routes” i generowane automatycznie helpery do ścieżek istnieją po to, żeby z nich korzystać. Prawdopodobnie brakujące elementy ścieżki wyciągane są z hasza params (zgaduję). Zerknij do dokumentacji: http://api.rubyonrails.org/classes/ActionController/Routing.html albo do przewodników http://guides.rubyonrails.org/routing.html a dowiesz się znacznie więcej.[/quote]
No tak tez sie domyslam ze bierze z hasza params. Czytałem dokumentacje i nie rozumiem dalej czeemu w tym przypadku bierze to category_id
pozatym zalozmy ze chcemy zrobic link do niestandardowej akcji :controller => ‘awsome’, :action => ‘brutal’, ale za nic w świecie nie chcemy aby ustwiony był category_id. Nie da sie tak zrobić ? .

Problem został rozwiazany poprzez uzycie nazwanych tras

map.promoted '/promoted', :controller => 'stories', :action => 'promoted'

ale dalej niepokoi mnie ta sytuacja …

Wydaje mi się, że próbujesz iść pod prąd. Railsy udostępniają bardzo dobry mechanizm generujący helpery do wszystkich akcji w kontrolerach (także tych niestandardowych). Nie spotkałem się z sytuacją, w której mechanizm ten byłby z jakichś powodów niewystarczający. W przypadku hasza zawsze możesz spróbować przypisać do nieszczęsnego :category_id wartość nil. Zachęcam Cię jednak do przejrzenia dokumentacji, przykładów, itp. i zrobienia tego w przyzwoity sposób.

BTW: nie posłuchałeś pierwszej rady :-).

a dlaczego nie restowo?
http://www.slideshare.net/edfactor/brief-introduction-to-rest-for-rails-developers