0

アプリケーションをローカライズしていて、アプリの特定の部分のルートを処理する方法に苦労しています。

当初、私は次のようなルートを持っていました:


    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/'他のルートで成功したことから、これらのルートに追加する必要があります。

私が遭遇した唯一の例は次のようになります。

  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は正しく生成されなくなり、次のエラーが発生します。

Admin / base#indexのActionController ::RoutingError

行#13が発生したapp / views / admin / shared / _menu.html.hamlを表示しています:

edit_admin_subscription_urlは、{:action => "edit"、:controller => "admin / subsets"、:locale => BSON :: ObjectId( '4d0ecb6587adddc91c000014')}からの生成に失敗しました。 "、:action =>" edit "}、diff:{:locale => BSON :: ObjectId( '4d0ecb6587adddc91c000014')}

この種のことを処理する適切な方法や、このURLがこれ以上生成されたくない理由について、誰もが理解できる洞察を心から感謝します。ありがとう!

4

1 に答える 1

0

ローカリゼーションの追加後に判明したように、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|

それを行うための最良の方法ですが、少なくとも今のところは機能しています。

于 2010-12-20T21:22:35.927 に答える