未初始化常量 Admin::Admin

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

使用 Ruby:

2.3.1p112
和 Rails:
3.2.12


我正在尝试在控制器中调用演示方法。所以,在我的

_form.html.erb
中,我有:

<%= link_to 'Demo', "/admin/clinics/"[email protected]_s+"/demo" %>

在我的

routes.rb

match "/admin" => "admin#index", :as => :admin

namespace :admin do
    resources :admin_users
    resources :health_plan_tables
    resources :health_aid_tables
    resources :clients
    resources :clinics
    resources :specialties
    resources :qualifications
    resources :profissionals
    resources :addresses
    resources :documents
    resources :banners
    root :to => 'banners#index'
    get 'logout' => 'devise/sessions#destroy'

    get 'clinics/:id/demo', to: 'admin/clinics#demo', as: 'demo'
end

我的

clinics_controller.rb
在文件夹
controllers/admin
里面,我只有:

def demo
    print "hello"
end 

因此,当我单击链接时,会出现错误消息

Uninitialized constant Admin::Admin
。 有什么想法如何修复它吗?

ruby-on-rails ruby routes
3个回答
4
投票

由于您已经在命名空间内定义了

demo
路由,因此无需指定
admin/clinics#demo
,只需要
clinics#demo
即可:

namespace :admin do
    resources :admin_users
    resources :health_plan_tables
    resources :health_aid_tables
    resources :clients
    resources :clinics
    resources :specialties
    resources :qualifications
    resources :profissionals
    resources :addresses
    resources :documents
    resources :banners
    root :to => 'banners#index'
    get 'logout' => 'devise/sessions#destroy'

    get 'clinics/:id/demo', to: 'clinics#demo', as: 'demo'
end

2
投票

根据错误日志,您正在寻找在 admin/admin/clinics 下命名的控制器(它在参数的控制器部分中表示)。

更改底部路由以不包含 admin (它已经命名空间,并且您实际上将其命名空间两次):

get 'clinics/:id/demo', to: 'clinics#demo', as: 'demo'

这将路由到正确的控制器 admin/clinics,而不是 admin/admin/clinics


0
投票

检查我为在子文件夹中组织控制器所做的回答。 https://stackoverflow.com/a/79040373/3548678

我认为这就是在控制器顶部使用模块的方式,类似于 Php 或 Java 中的命名空间,在我的 /controllers/users/admin 例子中是:

module Users::Admin

对于您的情况,只是管理“模块”或“命名空间”,因为位于管理目录下:

module Admin
  Class Admin::Clinics < BaseController ....
© www.soinside.com 2019 - 2024. All rights reserved.