首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“范围”周围的“山”无效?

“范围”周围的“山”无效?
EN

Stack Overflow用户
提问于 2017-07-06 09:24:06
回答 1查看 304关注 0票数 2

(虽然本文讨论的是Blacklight引擎,但我认为这个问题实际上完全是关于Rails的。)

我正试图在我的Blacklight应用程序中加入国际化。为此,我

  • config/routes.rb中的所有内容封装到scope "(:locale)", locale: /en|ja/中,并且
  • app/controllers/application_controller.rb中,我添加了before_action :set_locale并覆盖了default_url_options

正如Rails i18n导轨所建议的。大多数事情都是可行的,但有一件事我还没弄清楚。

我的所有应用程序路由都被正确映射,例如http://www.example.com/en/catalog/12345(/:locale)/catalog/:id(.:format)正确匹配,并被路由到catalog#show{:id=>/[^\/]+(?=\.json|\.html|$|\/)/, :locale=>/en|ja/})。所有设计的网址都没问题。一切正常..。除了mount-ed黑光引擎。

显然,黑光引擎不听scoperake routes显示:

代码语言:javascript
复制
Routes for Blacklight::Engine:
      search_history GET    /search_history(.:format)            search_history#index
      ....

而不是我所希望的(:locale)/search_history(.:format)

我已经修改了Blacklight模板,这样我就可以得到一个语言选择器,它以日语和英语两种语言指向当前页面,但是当我导航到search_history时,url_for在遇到:locale参数时突然弹出。

为什么mount忽略scope?如何解决我的问题(引擎路线也响应:locale)?

下面是我默认的Blacklight生成的config/routes.rb,用scope修改

代码语言:javascript
复制
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的路由除外。为什么,以及如何修复?

EN

回答 1

Stack Overflow用户

发布于 2017-07-07 07:47:27

Rails似乎确实忽略了引擎路由中的scope,但我可以显式地为引擎添加一个作用域:

代码语言:javascript
复制
Blacklight::Engine.routes.default_scope = { path: "(:locale)", locale: /en|ja/ }
mount Blacklight::Engine => '/'

然而,这仍然不能解决我的问题(在带有发动机路线的参数中继续)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44944848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档