2012-01-03 13 views
6

ho sovrascritti to_param metodo nel mio modello CategoryRouting in Rails. Dots in URL

def to_param 
    name 
end 

E routes.rb

get '/:id' => 'categories#show', :as => :category 

Quando name parametro non contiene punti (foobar), tutto funziona bene, ma quando si fa (f.o.o.b.a.r) Ottengo un errore No route matches [GET]. Quindi la mia domanda è: è possibile utilizzare i punti nel routing come una parte del nome del parametro? O cosa posso fare per raggiungere questo scopo, forse alcuni ganci o qualcosa del genere. Qualsiasi aiuto è apprezzato.

risposta

15

È possibile modificare i vincoli per questa rotta:

get ':/id' => "categories#show", :as => :category, :constraints => { :id => /[\w+\.]+/ } 

Questo percorso sarà ora corrispondere :id a qualsiasi stringa contenente qualsiasi carattere parola o un punto.

+6

Questo regexp corrisponderà solo a una parola con esattamente un punto dopo di esso. Devi usare '/ [\ w \.] + /'. –

+0

Dylan: Grazie, ho aggiornato questo. –

+0

Non vedo come questa sia una soluzione. Si interrompe se nell'URL ci sono caratteri non di parole, che probabilmente hanno almeno un '%' e devi almeno avere 1 punto. È come curare un mal di testa tagliando la testa. Questa è la soluzione giusta: http://stackoverflow.com/questions/5369654/why-do-routes-with-a-dot-in-a-parameter-fail-to-match – believesInSanta