Forum: Italian Ruby user group usare permalink al posto degli id nelle URL

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Andrea P. (Guest)
on 2009-05-30 19:01
(Received via mailing list)
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...
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.
Luca G. (Guest)
on 2009-05-30 19:32
(Received via mailing list)
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
Andrea P. (Guest)
on 2009-05-30 19:57
(Received via mailing list)
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:
Luca G. (Guest)
on 2009-05-30 23:27
(Received via mailing list)
Andrea P. wrote:
> mi sembra logico, perchè gli viene passato l'ID come parametro, non il
> permalink =P
A me non sembra logico :P se ti dice che non riesce a trovare il tag con
ID "pippo", vuoi dire che params[:id] == "pippo" ..

Luca
Andrea P. (Guest)
on 2009-06-02 12:08
(Received via mailing list)
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:
This topic is locked and can not be replied to.