rinominare percorsi (mappa, link_to, to_param) in rotaie
-
20-08-2019 - |
Domanda
Sto riscontrando un piccolo problema ... Ho installato un'applicazione Rails che serve un sito Web tedesco. Per utilizzare le funzionalità di pluralizzazione interna di Rails, ho tenuto tutti i miei modelli in inglese (ad esempio il modello & Quot; JobDescription
& Quot;).
Ora, se chiamo & Quot; http://mysite.com/job_descriptions/
& Quot ;, ottengo tutti i miei job_descriptions
.... finora, così bene. Perché non volevo il termine inglese & Quot; http://mysite.com/german_term/
& Quot; nel mio URL, ho inserito quanto segue nel mio route.rb
map.german_term '/german_term', :controller => 'job_descriptions', :action => 'index'
map.german_term '/german_term/:id', :controller => 'job_descriptions', :action => 'show'
Se chiamo " http://mysite.com/german_term/283
" oppure " job_description.rb
" Ottengo tutti i miei job_description_path
, il che va bene.
Tuttavia, per rendere l'URL più SEO friendly, vorrei scambiare l'id con una lumaca più intuitiva nell'URL. Pertanto, ho inserito quanto segue nel mio link_to
:
def to_param
"#{id}-#{name.gsub(/[^a-z0-9]+/i, '-')}"
end
che, ogni volta che uso " http://mysite/german_term/13-my-job-description-title
" in qualsiasi metodo german_term_path
, esegue il rendering dei miei URL in qualcosa come " http : &. // mysite / job_descriptions / 13-my-job-description-titolo quot;
Tuttavia, ed è qui che sono bloccato, vorrei ottenere " http://mysite/german_term/13
" ;. Ho già provato a scambiare il & Quot; to_param
& Quot; con " job_description
" nel codice link_to, ma che genera solo " german_term
" ;. Ovviamente, <=> non viene chiamato.
Una soluzione alternativa che ho trovato è quella di creare il collegamento con:
<%= link_to job_description.name, german_term_path(job_description.to_param) %>
Ma è piuttosto noioso cambiare tutte le <=> chiamate nel mio codice. Quello che voglio è sostituire & Quot; <=> & Quot; di " <=> " ogni volta che si verifica in un URL.
Qualche idea?!?
Saluti,
Sebastian
Soluzione
Penso che dovrai usare gli aiutanti di percorso riposanti per ottenere ciò che desideri.
In quel caso, non ci vorrebbe molto re-factoring (supponendo che tu abbia mappato JobDescription come risorsa). Lascia il tuo to_param così com'è e cambia il tuo percorso JobDescriptions in qualcosa di simile al seguente:
map.resources :job_descriptions, :as => 'german_term'
Spero che questo aiuti!
Altri suggerimenti
Rails utilizza solo
def to_params
end
Generatore di URL quando si utilizza un helper route / link riposante. L'unico modo in cui sono a conoscenza è di farlo in modo simile a come hai fatto, a meno che tu non sia disposto a scartare i tuoi collegamenti in lingua inglese e fare tutto in tedesco. In tal caso, basta sbarazzarsi delle linee di instradamento denominate e modificare to_params per utilizzare il campo del nome corretto dal database. A quel punto, le rotte REST dovrebbero comportarsi correttamente.