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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top