Usare permalink al posto degli id nelle URL


#1

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
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” 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.


#2

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ì:
http://bit.ly/2zRPE

Luca


#3

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:


#4

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 :wink:
A.

Luca G. ha scritto:


#5

Andrea P. wrote:

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

Luca