Как правильно обрабатывать локализованные маршруты с именами в Rails 2.3.8? - PullRequest
0 голосов
/ 20 декабря 2010

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

Изначально у меня были маршруты, которые выглядели так:


    map.namespace :admin do |admin|
      admin.resources :people, :member => {:confirm_destroy => :get}, :collection => {:follow => :post, :sync_friends => :get, :upload => :post, :import => :get, :recommendations => :get, :mark_recommendations => :post, :batch_create => :post}
      admin.resources :jobs, :collection => {:remove => :post}
      admin.resources :users, :member => {:confirm_destroy => :get}
      admin.resources :sites, :member => {:update_design => :post, :design => :get, :update_links => :post, :links => :get, :content => :get, :update_content => :post, :add_admin => :post, :remove_admin => :post, :set_system_account => :get, :confirm_system_account => :get}, :collection => {:remove => :post, :upload => :post}
      admin.resources :subscriptions, :member => { :charge => :post, :migrate_plan => :post, :update_components => :post }
      admin.resources :accounts, :collection => {:remove => :post}
      admin.resources :subscription_plans, :as => 'plans'
      admin.resources :subscription_discounts, :as => 'discounts'
      admin.resources :twitter_lists, :collection => {:auto_generate_twitter_list => :post}
    end

Из того, что я успешно сделал на других маршрутах, мне нужно добавить: :path_prefix => '/:locale/' к этим маршрутам.

Единственный пример, с которым я столкнулся, выглядит примерно так:

<pre> map.with_options(:path_prefix => '/:locale/admin') do |locale| locale.namespace :admin do |admin| admin.resources :people, :member => {:confirm_destroy => :get}, :collection => {:follow => :post, :sync_friends => :get, :upload => :post, :import => :get, :recommendations => :get, :mark_recommendations => :post, :batch_create => :post} admin.resources :subscriptions, :member => { :charge => :post, :migrate_plan => :post, :update_components => :post } admin.resources :accounts, :collection => {:remove => :post} etc etc etc end end

На самом деле это работает отлично для маршрутов, однако, это испортило некоторые из моих сгенерированных URL.

Например, ранее у меня было что-то вроде = link_to(t('subscription'), edit_admin_subscription_path(subscription_id), которое работало отлично ... после вышеуказанного изменения этот URL больше не генерируется должным образом, выдавая следующую ошибку:

ActionController::RoutingError in Admin/base#index

Showing app/views/admin/shared/_menu.html.haml where line #13 raised:

edit_admin_subscription_url failed to generate from {:action=>"edit", :controller=>"admin/subscriptions", :locale=>BSON::ObjectId('4d0ecb6587adddc91c000014')}, expected: {:controller=>"admin/subscriptions", :action=>"edit"}, diff: {:locale=>BSON::ObjectId('4d0ecb6587adddc91c000014')}

Я был бы искренне признателен за любую информацию, которую кто-либо может пролить на правильный способ обработки такого типа вещей и / или почему этот URL больше не нравится генерировать. СПАСИБО!

1 Ответ

0 голосов
/ 21 декабря 2010

Итак, как выяснилось после добавления локализации, мне нужно было более конкретно указать параметры, передаваемые в хелпер URL:

= link_to(t('subscription'), edit_admin_subscription_path(:id => subscription_id) работает просто отлично.Все еще не уверен, не уверен, является ли


  map.with_options(:path_prefix => '/:locale/admin') do |locale|
    locale.namespace :admin do |admin|

лучшим способом сделать это, но по крайней мере пока он работает.

...