所以我在Rails 4中编写了一个小组合应用程序。它有一个管理命名空间,允许我只公开某些控制器。
在开发过程中,一切都运行良好,但是当我部署到生产环境(或在我的开发机器上切换到生产)时,我收到以下错误:
superclass mismatch for class WorksController (TypeError)
我的控制器结构如下所示:
controllers ->
admin ->
admin_controller.rb
portfolio ->
works_controller.rb
portfolio->
works_controller.rb
正如您所看到的,我在作品集中命名了作品。
控制器声明如下:
/controllers/admin/admin_controller
class Admin::AdminController < ApplicationController
/controllers/admin/portfolio/works_controller
class Admin::Portfolio::WorksController < Admin::AdminController
/controllers/portfolio/works_controller.rb
class Portfolio::WorksController < ApplicationController
现在我的routes.rb,请注意我使用的是友好ID,所以我使用自定义路线让一个漂亮的客户端面向网址。
get '/portfolio/:id' => 'portfolio/works#show', as: 'portfolio_work'
namespace :admin do
namespace :portfolio do
resources :works
end
end
所以我知道我必须以某种方式搞砸了,但我不知道怎么做。我得到的错误与重新开课有关,但我不知道我是如何设法的。
非常感谢任何帮助。
答案 0 :(得分:1)
如果您重新定义/ controllers / admin / portfolio / works_controller,请执行以下操作:
module Admin
class Portfolio::WorksController < AdminController
答案 1 :(得分:1)
在@ReggieB试图帮助我之后发现了这个问题。原来我的Devise模型'Admin'和名为'Admin'的命名空间会产生问题(应该如此)。