# Usare permalink al posto degli id nelle URL

**URL:** <https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163>\
**Category:** IT\
**Created:** [May 30, 2009, 5:01pm UTC](https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163 "2009-05-30T17:01:07Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![stanley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7ab992/32.png) [@stanley](https://www.ruby-forum.com/u/stanley)\
**Post date:** [May 30, 2009, 5:01pm UTC](https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163/1 "2009-05-30T17:01:07Z")

</div>

salve a tutti,

sto cercando di usare i permalinks nelle URL, anzichè gli id, almeno per  
quanto riguarda i _tags_ =P

ho trovato questo articolo:  
[http://www.seoonrails.com/even-better-looking-urls-with-permalink\_fu](http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu)  
dove invita ad installare un plugin (permalink\_fu) per gestirlo in modo  
semplice. ho seguito le indicazioni senza grossi problemi, ma alla fine  
quando richiedo una url tipo “[http://localhost:3001/tags/pippo](http://localhost:3001/tags/pippo)” ricevo  
questo errore:

ActiveRecord::RecordNotFound in TagsController#show  
Couldn’t find Tag without an ID

Request Parameters:  
{“permalink”=\>“pippo”}

il methodo del controller, è implementato  
così:  
def show  
@tag = Tag.find\_by\_permalink(params[:permalink])  
respond\_to do |format|  
format.html # show.html.erb  
end  
end

nella view, il link alla richiesta è generato  
così:\<%= link\_to ‘Show’ , :controller =\> ‘tags’, :action =\> ‘show’,  
:permalink =\> tag.permalink %\>

mentre la route delle tags è questa:  
map.connect ‘tags/:permalink’, :controller =\> ‘tags’, :action =\> ‘show’

in console funziona senza problemi, non capisco quindi dove potrebbe  
essere l’errore… grazie a tutti per l’eventuale aiuto =)

A.

---

<div class="post-metadata">

**Author:** ![stanley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7ab992/32.png) [@stanley](https://www.ruby-forum.com/u/stanley)\
**Post date:** [May 30, 2009, 5:32pm UTC](https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163/2 "2009-05-30T17:32:50Z")

</div>

permalink\_fu è utile soprattutto per ActiveRecord: estrae, a partire da  
un attributo, una stringa che contenga caratteri validi per costituire  
una URI.

Più o meno, per ottenere quello che vuoi, dovresti fare così:

> <https://gist.github.com/jodosha/120532>
>
> There are more than three files. show original

Luca

---

<div class="post-metadata">

**Author:** ![stanley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7ab992/32.png) [@stanley](https://www.ruby-forum.com/u/stanley)\
**Post date:** [May 30, 2009, 5:57pm UTC](https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163/3 "2009-05-30T17:57:02Z")

</div>

Ciao Luca, grazie per la risposta =)

purtroppo, la mia situazione era quasi identica alla pagina che mi hai  
linkato, ma dopo aver cambiato l’unica riga differente, cambiando il  
modo di instanziare la variabile @tag:

@tag = Tag.find\_by\_permalink!(params[:id])

l’errore cambia, e diventa:

Couldn’t find Tag with ID=pippo

mi sembra logico, perchè gli viene passato l’ID come parametro, non il  
permalink =P

non è capitato a nessuno di dover risolvere un problema simile?

ciao,  
And

Luca G. ha scritto:

---

<div class="post-metadata">

**Author:** ![stanley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7ab992/32.png) [@stanley](https://www.ruby-forum.com/u/stanley)\
**Post date:** [June 2, 2009, 10:08am UTC](https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163/4 "2009-06-02T10:08:57Z")

</div>

Grazie di nuovo Luca =)

hai ragione, di logico c’era davvero poco =P mi sono espresso così  
perchè stavo editando il file sbagliato (admin/tags\_controller anzichè  
tags\_controller) e lì, tra le varie prove, avevo specificato il  
permalink come parametro passato al controller =P

tutto risolto, grazie 😉  
A.

Luca G. ha scritto:

---

<div class="post-metadata">

**Author:** ![stanley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/7ab992/32.png) [@stanley](https://www.ruby-forum.com/u/stanley)\
**Post date:** [May 30, 2009, 9:27pm UTC](https://www.ruby-forum.com/t/usare-permalink-al-posto-degli-id-nelle-url/169163/5 "2009-05-30T21:27:06Z")

</div>

Andrea P. wrote:

> mi sembra logico, perchè gli viene passato l’ID come parametro, non il  
> permalink =P  
> A me non sembra logico 😛 se ti dice che non riesce a trovare il tag con  
> ID “pippo”, vuoi dire che params[:id] == “pippo” …

Luca
