0

(この記事ではBlacklightエンジンについて説明していますが、実際はRailsに関する質問のみとなります)`mount`の` scope`は効果がありませんか?

Blacklightアプリに国際化機能を追加しようとしています。 Rails i18n guideにより示唆されるようにそのためには、I

  • scope "(:locale)", locale: /en|ja/config/routes.rbのすべてを包み、app/controllers/application_controller.rb

  • は私がbefore_action :set_localeとオーバーライドdefault_url_options

を追加しました。ほとんどのものは動作しますが、私が把握できなかったことが1つあります。

私のアプリケーションルートはすべて正しくマップされています。 http://www.example.com/en/catalog/12345(/:locale)/catalog/:id(.:format)と正しく一致し、でcatalog#showにルーティングされます。 DeviseのURLはすべて問題ありません。すべてが動作します... mount -ed Blacklightエンジンを除きます。

明らかに、Blacklightエンジンはscopeを聞いていません。 rake routesショー:

Routes for Blacklight::Engine: 
     search_history GET /search_history(.:format)   search_history#index 
     .... 

なく(:locale)/search_history(.:format)、私が望んでいるだろうと。

:localeパラメータに直面したとき突然スロー私は日本語と英語の両方で現在のページを指す語チューを得るように、私はブラックライトテンプレートを変更したが、私はsearch_historyに移動したときに、url_for

なぜmountは、scopeを無視しますか?問題を解決するにはどうすればいいですか(エンジンルートも:localeに対応しています)?

は、ここに私のデフォルトはscopeで修飾し、config/routes.rbをブラックライトで生成します:

Rails.application.routes.draw do 

    scope "(:locale)", locale: /en|ja/ do 
    mount Blacklight::Engine => '/' 
    root to: "catalog#index" 
     concern :searchable, Blacklight::Routes::Searchable.new 

    resource :catalog, only: [:index], as: 'catalog', path: '/catalog', controller: 'catalog', id: /[^\/]+(?=\.json|\.html|$|\/)/ do 
     concerns :searchable 
    end 

    devise_for :users 
    concern :exportable, Blacklight::Routes::Exportable.new 

    resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog', id: /[^\/]+(?=\.json|\.html|$|\/)/ do 
     concerns :exportable 
    end 

    resources :bookmarks, id: /[^\/]+(?=\.json|\.html|$|\/)/ do 
     concerns :exportable 

     collection do 
     delete 'clear' 
     end 
    end 
    end 
end 

TL; DR:scopeプレフィックス私のすべてのルート、mountによってルートを除きます。なぜ、どのように修正するのですか?

答えて

0

Railsが実際にエンジンのルートでscope無視しているようだが、私は明示的にエンジンの有効範囲を追加することができます。

Blacklight::Engine.routes.default_scope = { path: "(:locale)", locale: /en|ja/ } 
mount Blacklight::Engine => '/' 

をしかし、まだ(link_to with parameters for an Engine routeに続けて)私の問題を解決しないこと。

関連する問題