Как лучше всего переводить слагов в маршрутах Rails? - PullRequest
5 голосов
/ 15 января 2012

Я пытаюсь добиться полной интернационализации моих маршрутов в приложении Rails3.1. Я уже использую rails-translate-routs Франческа Пла для локализации действий и ресурсов маршрута. Последний шаг - уметь переводить слагов для некоторых моих моделей.

Маршрут для перевода:

http://myhost.com/products/pharmacy --> http://myhost.com/productos/farmacia

У меня есть вложенный маршрут вида

# routes.rb
match 'products/:category_slug' => "products#index"

У меня есть категория модели с экземпляром #<Category id: 1, slug: "pharmacy">, и я делаю категорию find_by_slug в моем ProductsController.

Любые идеи о том, как сделать :category_slug часть маршрута?

1 Ответ

0 голосов
/ 28 октября 2012

Насколько я знаю, вы можете вызывать помощников по переводу напрямую с вашего контроллера, если вы правильно используете пространство имен с помощью I18n.

Таким образом, ваш ProductsController может содержать что-то вроде следующего:

class ProductsController < ApplicationController
  def index
    i18n_slug = I18n.t("locale.category.#{params[:category_slug]}")
    @category = Category.find_by_slug(i18n_slug)
  end
end

Вы, вероятно, должны быть осведомлены о потенциальных угрозах безопасности, связанных с передачей параметров непосредственно в механизм перевода, хотя я ничего об этом не знаю. Вы могли бы также рассмотреть переместить его в фильтр before или в контроллер приложения, если он будет использоваться в нескольких действиях контроллера.

...