Rails 从命名空间控制器内部路由路径助手

问题描述 投票:0回答:1

我有一个应用程序,其中有一些顶级模型,全部正常工作。我的布局视图有一个标题部分,并且在导航栏上有主要的导航链接,这是非常标准的东西。现在我要添加一些新功能,因为稍后还会有更多功能,所以我决定将新模型和控制器封装在命名空间中以保持应用程序整洁。好吧,当我尝试第一个索引视图时,它不会加载。错误是

No route matches {:action=>"index", :controller=>"electrical/roles", :locale=>:en}
确实如此,到“角色”的路由不经过电气命名空间。评估标头部分时会生成该错误。该链接的 .erb 代码与我所有其他有效的视图相同。路径助手是否将名称空间添加到路径中,因为现在正在从该名称空间内的视图调用它?如果是这样,我如何路由出命名空间?或者更好的是,我可以告诉它不要弄乱我的路径,并且当我需要命名空间路径时我会明确告诉它吗?

/app/views/layouts/_header.html.erb

<% if current_user.has_role? :admin %>
          <li class="nav-item">
            <%= link_to t('role', scope: 'activerecord.models').pluralize,
              roles_path,
              class: ['nav-link', { active: current_page?(controller: 'roles') }],
              aria: { label: t('role', scope: 'activerecord.models').pluralize } %>
          </li>
        <% end %>

/config/routes.rb

    Rails.application.routes.draw do
      scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
        get 'site/home'
...
        devise_for :users
        resources :users, :only => [:show, :index]
        resources :projects
        resources :tags
        resources :users, :only => [] do
          resources :roles, :only => [:destroy]
        end
        resources :roles, :only => [:index, :new, :create]
        namespace :electrical do
          resources :cable_types
...
          resources :cables
        end
      end
    
      # Defines the root path route ("/")
      root to: 'site#home'
    end
ruby-on-rails routes namespaces
1个回答
0
投票

最可能的罪魁祸首是

current_page?(controller: 'roles')
,它使用当前请求作为上下文,并且在以旧的非基于资源的方式使用时可能会给出一些意想不到的结果。

您可以通过传递一个字符串来避免这种情况 -

current_page?(roles_path)

参见:

© www.soinside.com 2019 - 2024. All rights reserved.