0

(Während dies Blacklight-Engine diskutiert, glaube ich, die Frage ist eigentlich rein über Rails.)`scope` um` mount` ineffektiv?

Ich versuche Internationalisierung meiner Blacklight App hinzuzufügen. Zu diesem Zweck ich

  • wickelte alles in config/routes.rb in scope "(:locale)", locale: /en|ja/ und

  • in app/controllers/application_controller.rb Ich habe before_action :set_locale und overrode default_url_options

wie Rails i18n guide vorgeschlagen. Die meisten Dinge funktionieren, aber eine Sache konnte ich noch nicht herausfinden.

Alle meine Anwendungsrouten sind korrekt zugeordnet, z. http://www.example.com/en/catalog/12345 stimmt mit (/:locale)/catalog/:id(.:format) korrekt überein und wird mit {:id=>/[^\/]+(?=\.json|\.html|$|\/)/, :locale=>/en|ja/} an catalog#show weitergeleitet). Alle URLs von Devise sind in Ordnung. Alles funktioniert ... außer der Blacklight-Engine mount.

Offenbar hört die Blacklight Engine nicht auf scope. rake routes zeigt:

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

und nicht (:locale)/search_history(.:format) wie ich hoffe würde.

Ich habe die Blacklight-Vorlage so modifizierte, dass ich sowohl eine Sprache auswählen Hinweis auf die aktuelle Seite in Japanisch und Englisch, aber wenn ich zu search_history navigieren, url_for wirft plötzlich auf, wenn sie mit dem :locale Parameter konfrontiert.

Warum ignoriert mountscope? Wie löse ich mein Problem (Motorrouten reagieren auch auf :locale)?

Hier ist meine Standard config/routes.rb Blacklight-generierte, modifiziert mit scope:

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 Präfixe alle meine Routen, mit Ausnahme der Strecken durch mount. Warum und wie reparieren?

Antwort

0

Es scheint, dass Rails in der Tat scope in den Motor Routen ignoriert, aber ich kann einen Rahmen für den Motor explizit hinzufügen:

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

jedoch, dass immer noch nicht meine Probleme löst (Fortsetzung in link_to with parameters for an Engine route).