Zagniezdzone trasowanie

Mamy taka sytuacje

Modele :post, :category

class Post acts_as_taggable belongs_to :category named_scope :awsome ....... named_scope: brutal .... end
Chce miec takie urle (uwzgledniajace kategorie, tag, named_scope, paginacje) (dla named_scopa awsome jest trasa map.awsome …)

posts/kategoria/fajna/tag/misio/3
awsome/kategoria/fajna/tag/misio/2/brutal

Ogolny pseudokod
:what/kategoria/:category/tag/:tag/:page/:filtr

:what dotyczy kontrolera posts lub jakiegos named_scopa dla tego kontrolera
oczywiscie fajnie jakby wszystkie patrametry byly opcjonane czyli mozemy zrobic tez tak :

awsome/tag/miso/4
posts/kategoria/jakas
awsome/3/brutal

Zaczalem odczegos takiego :

map.connect ‘:action/kategoria/:category’, :controller => ‘stories’
map.connect ‘/kategoria/:category’, :controller => ‘stories’

ale dla wszystkich przypadkow byloby duzo strasznie tego i balagan by sie zaczal (wersja bez taga z tagiem bez kategori ale z filterm i.t.p)

A moze nie powinno sie tak tras nazywac tylko

posts/categories/5/tags/4/2/brutal
albo najlepiej tak :
posts/categories/5-Kraj/tags/4-kryzys/2/brutal

Poczytaj o REST-owych resource’ach i jak się je definiuje w routes.rb dla Rails >= 2.0.
W dużym skrócie i na przykład:

map.resources :categories do |category| category.resources :posts category.resources :tags do |tag| tag.resources :posts end end

Meh… byłeś pierwszy - pisałem dokładnie taki sam blok :slight_smile:
To tylko dodam, że takie parametry jak “page” i “filter” ja wrzucam w query string, czyli wychodzi coś postaci /categories/5/posts?page=3&f=awesome

PS: “awesome”, “brutal” WTF?!? :slight_smile: To autentyczna aplikacja?

[quote=Tomash]Poczytaj o REST-owych resource’ach i jak się je definiuje w routes.rb dla Rails >= 2.0.
W dużym skrócie i na przykład:

map.resources :categories do |category| category.resources :posts category.resources :tags do |tag| tag.resources :posts end end
[/quote]
Tak . To wiem ze mozna ale wtedy mam urle typu

/categories/:category_id/tags/:tag_id/posts?page=7

takie wlasnie restowe
a nie

/posts/kategoria/baloniki/tag/miso/7

taki url wydaje sie czytelniejszy ale, pewnie napiszecie ze takie trasowanie nic nie daje a nie jest restowe wiec jest be

[quote=czak]…

PS: “awesome”, “brutal” WTF?!? :slight_smile: To autentyczna aplikacja?[/quote]
nie no co ty …

Popatrz na liczniki postów i rozważ swoje szanse :smiley:
A pozytywniej: “great minds think alike”.

[quote]Tak . To wiem ze mozna ale wtedy mam urle typu

/categories/:category_id/tags/:tag_id/posts?page=7

takie wlasnie restowe
a nie

/posts/kategoria/baloniki/tag/miso/7

taki url wydaje sie czytelniejszy ale, pewnie napiszecie ze takie trasowanie nic nie daje a nie jest restowe wiec jest be[/quote]
Wiesz, railsy są tak fajnie zbudowane, że zasadniczo można w nich wszystko, ale jeśli Twoje wszystko odbiega od “wszystko to co autorzy Railsów i 98% społeczności uważają za słuszne”, to masz przerąbane i radź sobie sam :wink:

Łe… szkoda :wink:

Nie jest restowe więc będziesz się babrał i walczył z Railsem zamiast go posłuchać i mieć z górki. Zrobić można wszystko, ale robiąc zgodnie ze standardami masz wszystko jak na tacy.

Wg mnie URL, który podałeś nie jest czytelniejszy od standardowego, ale ja się już do railsowych URLi przyzwyczaiłem. Zaletą railsowych URLi jest m.in. to, że można z nich uciąć dowolny segment:

/categories/:category_id/tags/:tag_id/posts?page=7
/categories/:category_id/tags/:tag_id/posts
/categories/:category_id/tags/:tag_id
/categories/:category_id/tags
/categories/:category_id
/categories

i każdy prowadzi do poprawnego zasobu. W schemacie “/posts/kategoria/baloniki/tag/miso/7” jest np “/posts/kategoria” który takiego warunku nie spełnia.

A jeśli chodzi Ci o polskie nazwy (“kategorie” zamiast “categories”), to nic nie stoi na przeszkodzie:

map.resources :recipes, :as => "przepisy" do |recipe| recipe.resources :ingredients, :as => "skladniki" end

Nie no mi jaknajbardziej odpowiada podejscie railsowe

dzieki, pozdr

Ale gonię Cię… beware! :wink: