переименование маршрутов (map, link_to, to_param) в рельсах - PullRequest
2 голосов
/ 29 января 2009

У меня небольшая проблема ... Я установил приложение rails, которое должно обслуживать немецкий сайт. Чтобы использовать внутренние плюрализмы Rails, я держал все свои модели на английском языке (например, модель "JobDescription"). Теперь, если я позвоню "http://mysite.com/job_descriptions/", я получу все свои job_descriptions .... пока все хорошо. Поскольку я не хотел, чтобы в моем URL-адресе был английский термин "job_descriptions", я добавил следующее в мои маршруты. Rb

map.german_term '/german_term', :controller => 'job_descriptions', :action => 'index'
map.german_term '/german_term/:id', :controller => 'job_descriptions', :action => 'show'

Если я позвоню "http://mysite.com/german_term/" или "http://mysite.com/german_term/283", я получу все свои job_descriptions, что хорошо.

Однако, чтобы сделать URL-адрес более удобным для SEO, я хотел бы обменять этот идентификатор на более удобный для пользователя фрагмент в URL-адресе. Таким образом, я вставил в свой job_description.rb следующее:

def to_param
"#{id}-#{name.gsub(/[^a-z0-9]+/i, '-')}"
end

, который всякий раз, когда я использую "job_description_path" в любом методе link_to, выводит мои URL-адреса примерно как "http://mysite/job_descriptions/13-my-job-description-title".

Однако, и вот где я застрял, я хотел бы получить "http://mysite/german_term/13-my-job-description-title". Я уже пытался заменить "job_description_path" на "german_term_path" в коде link_to, но это только генерирует "http://mysite/german_term/13". Очевидно, to_param не называется. Я нашел один обходной путь - создать ссылку с помощью

<%= link_to job_description.name, german_term_path(job_description.to_param) %>

Но довольно утомительно менять все вызовы link_to в моем коде. Я хочу заменить "job_description" на "german_term" всякий раз, когда это встречается в URL.

Есть мысли?!?

С уважением,

Себастьян

Ответы [ 2 ]

7 голосов
/ 29 января 2009

Я думаю, что вам нужно будет использовать спокойных помощников маршрута, чтобы получить то, что вы хотите.

В этом случае это не потребует большого перефакторинга (при условии, что вы отобразили JobDescription в качестве ресурса). Оставьте ваш to_param как есть и измените маршрут JobDescription на что-то вроде следующего:

map.resources :job_descriptions, :as => 'german_term'

Надеюсь, это поможет!

0 голосов
/ 29 января 2009

Rails использует только

def to_params 
end

Конструктор URL, когда вы используете спокойный помощник маршрута / ссылки. Единственный способ, которым я знаю, - это делать то же самое, что и вы, если только вы не хотите просто перебирать ссылки на английском языке и делать все это на немецком языке. В этом случае просто избавьтесь от названных линий маршрута и измените to_params, чтобы использовать правильное поле имени из базы данных. На этом этапе маршруты REST должны работать правильно.

...