# Aiuto su routing particolare

**URL:** <https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131>\
**Category:** IT\
**Created:** [January 22, 2011, 1:37pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131 "2011-01-22T13:37:45Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [January 22, 2011, 1:37pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/1 "2011-01-22T13:37:45Z")

</div>

ciao ragazzi. mi son letto il routing di rails 3 ma non ho trovato  
quello che cercavo, quindi spero in un vostro aiuto.

sono alle prese con un blog (per imparare rails) ed ho - semplifico -  
due controller + model: post e categories

categories has\_many posts  
e  
post belongs\_to category

tutto funziona a meraviglia.  
le categories sono accessibili all’url /categories mentre i post all’url  
/posts.  
io vorrei far si che quando apro un post (action show), l’url diventi  
/categoria\_post/nome\_post, anzichè /post/id.

sapete se è possibile realizzare una cosa del genere? dico da subito che  
le relazioni funzionano e non ci sono problemi, l’unica cosa di cui ho  
bisogno è di aggiungere la categoria del post all’url.

potete darmi una mano? an si, uso rails 3.

grazie mille!

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 22, 2011, 4:25pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/2 "2011-01-22T16:25:45Z")

</div>

puoi fare qualcosa del genere:

resources :categories do  
resources :posts  
end

in questo modo avrai i posts sempre sotto una specifica categoria e  
genererai le  
url con qualcosa tipo: category\_post\_url(categoia, post).

ciao,  
A.

Il 22/01/2011 13:37, Dino D. ha scritto:

> tutto funziona a meraviglia.
> 
> grazie mille!

–  
[http://twitter.com/apeacox](http://twitter.com/apeacox)

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 22, 2011, 5:32pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/3 "2011-01-22T17:32:35Z")

</div>

grazie andrea e grazie per le tue risposte in questo e altri topic.  
forse non mi sono spiegato bene io. procediamo per step.

ho diverse categorie (/categories/): macchine, fiori, lavoro

1: come faccio a far uscire nell’url /categories/macchine anzichè  
/categories/3 \<- id ??

2: mettiamo che nell’home page ho un post chiamato ‘la nuova formula 1’,  
che appartiene alla categoria macchine. ora, voglio far si che quando  
apro il post, mi venga mostrato un url del tipo:  
/categories/macchine/la-nuova-formula-1 anzichè /posts/5 \<- id

3: ciliegina sulla torta, rails ha un suo rewrite interno? per esempio,  
come faccio a visualizzare /categorie (in italiano) anzichè il nome del  
controller /categories ??

grazie!

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 23, 2011, 12:16pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/4 "2011-01-23T12:16:26Z")

</div>

risposta in quote 😉

Il 22/01/2011 17:32, Dino D. ha scritto:

> ho diverse categorie (/categories/): macchine, fiori, lavoro
> 
> 1: come faccio a far uscire nell’url /categories/macchine anzich  
> /categories/3\<- id ??  
> puoi usare il plugin permalink\_fu  
> ([GitHub - technoweenie/permalink\_fu: ActiveRecord plugin for automatically converting fields to permalinks.](http://github.com/technoweenie/permalink_fu)  
> [https://github.com/technoweenie/permalink\_fu](https://github.com/technoweenie/permalink_fu)) che ti permette  
> facilmente di  
> usare una stringa al posto di un id per trovare il record. nella action  
> di un  
> controller avresti un codice tipo:

Post.find\_by\_permalink(params[:id])

> 2: mettiamo che nell’home page ho un post chiamato ‘la nuova formula 1’,  
> che appartiene alla categoria macchine. ora, voglio far si che quando  
> apro il post, mi venga mostrato un url del tipo:  
> /categories/macchine/la-nuova-formula-1 anzich /posts/5\<- id  
> con le routes impostate come ti ho indicato ieri, otterresti una URL  
> strutturata  
> come vuoi tu. usando permalink\_fu userai il permalink anzich l’id

> 3: ciliegina sulla torta, rails ha un suo rewrite interno? per esempio,  
> come faccio a visualizzare /categorie (in italiano) anzich il nome del  
> controller /categories ??  
> fortunatamente rails3 permette di tradurre in pi lingue anche le routes.  
> non ho  
> mai affrontato questo argomento, comunque una ricerca su google con  
> “rails3 i18n  
> routes” dovresti trovare un po’ di risultati 😉

ciao,  
A.

–  
[http://twitter.com/apeacox](http://twitter.com/apeacox)

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 23, 2011, 2:19pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/5 "2011-01-23T14:19:06Z")

</div>

ciao andrea. provando a modificare le routes, in questa maniera:

* * *

#resources :posts

## resources :categories do resources :posts end

e commentando ‘resources :posts’ mi esce il seguente errore:

No route matches {:controller=\>“posts”}

se invece non commento ‘resources :posts’ l’errore non esce e tutto  
torna a funzionare come prima, ma comunque /categories/macchine/post\_id  
non funziona. che devo fare?

per il rewrite degli url ho trovato una soluzione più semplice (anche se  
meno valida di permalink\_fu), che consiste nell’aggiungere al model la  
funzione

def to\_param  
“#{id}-#{name.downcase.gsub(/[^a-z0-9]+/i, ‘-’)}”  
end

che mi mostrerà gli url nel seguente formato /posts/10-formula-1 , in  
cui ‘10-’ è l’id del post. con permalink\_fu invece, il risultato sarebbe  
diverso, cioè /posts/formula-1 (senza l’id nell’url). al momento mi  
basta così, anche perchè non ho voglia di provare permalink XD

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 23, 2011, 2:51pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/6 "2011-01-23T14:51:28Z")

</div>

Il 23/01/2011 14:19, Dino D. ha scritto:

> e commentando ‘resources :posts’ mi esce il seguente errore:
> 
> No route matches {:controller=\>“posts”}

dipende da quado/come vuoi raggiungere una risorsa. se tu vuoi  
raggiungere i  
posts con una url tipo:

/posts/un-post

allora nelle routes userai:

resources :posts

se invece preferisci le rotte verso i posts che passano anche per la  
categoria,  
allora userai:

resources :categories do  
resources :posts  
end

in questo caso le url saranno:

/categories/:category\_id/posts/:id

potresti anche lasciare entrambe, ma in quel caso ti conviene usare gli  
helper:

category\_post\_url(category,post)

post\_url(post)

infine, ricorda che puoi sperimentare con le routes guardando quali  
rotte hai a disposizione, basta lanciare il comando:

rake routes

aiutati anche con la guida che trovi  
su:[Rails Routing from the Outside In — Ruby on Rails Guides](http://guides.rubyonrails.org/routing.html)

non conoscendo come stai gestendo la tua app, non posso esserti pi utile  
😉

ultima cosa, con permalink\_fu puoi ottenere le url con il formato che  
vuoi, basta specificarlo 😛

ciao,  
A.

> end
> 
> che mi mostrer gli url nel seguente formato /posts/10-formula-1 , in  
> cui ‘10-’ l’id del post. con permalink\_fu invece, il risultato sarebbe  
> diverso, cio /posts/formula-1 (senza l’id nell’url). al momento mi  
> basta cos, anche perch non ho voglia di provare permalink XD

–  
[http://twitter.com/apeacox](http://twitter.com/apeacox)

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 23, 2011, 3:15pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/7 "2011-01-23T15:15:09Z")

</div>

ok dai ci sono riuscito.  
ora però mi risulta un altro problema…mannaggia!

/categories/:category\_id/posts/:id

come faccio a ‘togliere’ posts dall’url?  
in modo che mi risulti così:

/categories/:category\_id/:id\_del\_post

* * *

edit, problema 2:

usando l’helper [‘category\_post\_url(post)’ ← da un partial]

\<%= link\_to activities.name, category\_activities\_url(activities) %\>

il link in questione mi punta a:

[http://127.0.0.1:3000/categories/10-formula-1/posts](http://127.0.0.1:3000/categories/10-formula-1/posts)

io invece lo vorrei:

[http://127.0.0.1:3000/categories/macchine(cat.name)/10-formula-1](http://127.0.0.1:3000/categories/macchine(cat.name)/10-formula-1)

cosa alquanto strana. premetto che il link comunque funziona.  
se ti serve sapere qualcosa di specifico sull’app te lo faccio sapere.

grazie dell’aiuto andrea

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 23, 2011, 4:17pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/8 "2011-01-23T16:17:16Z")

</div>

problema 2 risolto, dovevo creare il link con  
category\_post\_url(@category,post)

ora mi rimane il problema 1:

> /categories/:category\_id/posts/:id
> 
> come faccio a ‘togliere’ posts dall’url?  
> in modo che mi risulti così:
> 
> /categories/:category\_id/:id\_del\_post

---

<div class="post-metadata">

**Author:** ![dino\_d](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b5ac83/32.png) [@dino\_d](https://www.ruby-forum.com/u/dino_d)\
**Post date:** [January 23, 2011, 5:51pm UTC](https://www.ruby-forum.com/t/aiuto-su-routing-particolare/202131/9 "2011-01-23T17:51:09Z")

</div>

leggendomi bene come funzionano le routes sono riuscito a far funzionare  
l’url /categories/:category\_id/:id\_del\_post, aggiungendo al routes.rb la  
linea:

match ‘categories/:category\_id/:id’ =\> ‘posts#show’

quello che non capisco, è perchè l’helper category\_activity\_url mi  
generi ancora l’url nel formato:

/categories/:category\_id/posts/:id

non so, sto diventando pazzo!!
