переименование маршрутов (map, link_to, to_param) в рельсах

StackOverflow https://stackoverflow.com/questions/492042

Вопрос

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

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-адресе.

Есть идеи?!?

С уважением,

Себастьян

Это было полезно?

Решение

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

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

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

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

Другие советы

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

def to_params 
end

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top