Маршрут Rails4 с областью действия и пространством имен

совершенно новичок в Ruby и Rails, так что это, вероятно, глупый вопрос;)

Я пытаюсь получить маршрут «i18n», работающий с пространством имен «admin».

Итак, мой файл маршрутов выглядит так

scope '/:locale' do
  root 'admin#index', as: :root
  namespace :admin do
    resources :foos
  end
end

В моем ApplicationController у меня есть

before_action :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options={})
  { locale: I18n.locale }
end

Если я "разгребаю маршруты", то получаю следующее

root GET    /                     admin#index
     GET    /:locale(.:format)    admin#index
admin_foos GET    /:locale/admin/foos(.:format)  admin/foos#index

И я могу связаться с /en/admin/foos

Проблема, с которой я столкнулся, заключается в том, что если я напечатаю путь в представлении (даже путь из моей формы,...), я получу путь /admin/foo?locale=en. И этот URL с окончанием 404.

Вызовы пути просты, такие

<%= link_to 'Back', admin_foos_path %>

Я думаю, что я что-то упускаю, но понятия не имею, что. Любая помощь будет оценена!

С уважением, Бенджамин


person bmichotte    schedule 02.07.2013    source источник
comment
Странный. Возможно, опубликуйте свой код просмотра, который генерирует эти URL-адреса?   -  person GoGoCarl    schedule 02.07.2013


Ответы (1)


Я верю, что вы хотите:

admin_foos_path :locale => 'en'
admin_foo_path :id => @foo.id, :locale => 'en'

и т.д...

Если вы генерируете свои URL-адреса таким образом, это должно помочь.

person GoGoCarl    schedule 03.07.2013