使用 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
。
有什么想法如何修复它吗?
由于您已经在命名空间内定义了
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
根据错误日志,您正在寻找在 admin/admin/clinics 下命名的控制器(它在参数的控制器部分中表示)。
更改底部路由以不包含 admin (它已经命名空间,并且您实际上将其命名空间两次):
get 'clinics/:id/demo', to: 'clinics#demo', as: 'demo'
这将路由到正确的控制器 admin/clinics,而不是 admin/admin/clinics
检查我为在子文件夹中组织控制器所做的回答。 https://stackoverflow.com/a/79040373/3548678
我认为这就是在控制器顶部使用模块的方式,类似于 Php 或 Java 中的命名空间,在我的 /controllers/users/admin 例子中是:
module Users::Admin
对于您的情况,只是管理“模块”或“命名空间”,因为位于管理目录下:
module Admin
Class Admin::Clinics < BaseController ....