Rails I18n локализация маршрутизации и тестирование RSpec - PullRequest
0 голосов
/ 08 февраля 2012

Моя заявка была написана на английском языке, и все было хорошо. Вчера я начал играть с поддержкой интернационализации Rails.I18n. Все хорошо. Когда я просматриваю http://localhost:3000/jp/discounts, это на японском языке, а 'http://localhost:3000/discounts' дает мне английскую локаль по умолчанию (если локаль не указана).

Вот мой route.rb, и, как вы можете видеть, пространство имен администратора не локализовано:

scope '(:locale)' do
  resources :discounts do
    resource :map, only: :show
    collection do
      get :featured_city
    end
  end
end
namespace :admin do
  resources :users do
    collection do
      get :members
      get :search
    end
  end
end

Однако мой RSpec начинает отказывать.

Failure/Error: it { should route_to('admin/users#edit', id: '1') }
The recognized options <{"action"=>"edit", "controller"=>"users", "locale"=>"admin", "id"=>"1"}> 
  did not match <{"id"=>"1", "controller"=>"admin/users", "action"=>"edit"}>, 
difference: <{"controller"=>"admin/users", "locale"=>"admin"}>.
  <{"id"=>"1", "controller"=>"admin/users", "action"=>"edit"}> expected but was
  <{"action"=>"edit", "controller"=>"users", "locale"=>"admin", "id"=>"1"}>

Все тесты, связанные с администратором, имеют такую ​​проблему. Как я могу решить это? Он отлично работает в разработке.

Вот другой код, связанный с локалью:

application_controller.rb

  def default_url_options
    { locale: I18n.locale }
  end

конфиг / Инициализаторы / i18n.rb

#encoding: utf-8
I18n.default_locale = :en

LANGUAGES = [
  ['English', 'en'],
  ["Japanese", 'jp']
]

1 Ответ

2 голосов
/ 08 февраля 2012

Когда Rails пытается сопоставить данный URL-адрес с маршрутом, он начинается в верхней части файла config/routes.rb и останавливается на первом маршруте, который он считает совпадающим. Поскольку в исходном вопросе у вас сначала был блок scope, Rails подумал, что ваши /admin URL-адреса указывают маршрут с :locale => 'admin'.

Вам необходимо, чтобы Rails соответствовал путям, начинающимся с /admin, вашему пространству имен администратора. Поместив это в файл маршрутов первым, вы заставляете Rails «перестать искать», когда он находит это совпадение.

Это грубое упрощение, но я надеюсь, что это полезно.

Также ознакомьтесь с Руководством по маршрутизации Rails , если вы этого еще не сделали.

...