类的最高级别不匹配CommentsController(TypeError),重命名的最佳方法是什么?

今晚我在部署时遇到了一些问题,我正试图尽快解决这个问题

我不知道为什么会这样。 一切都在本地很好,但不是在heroku上。 我在研究之后尝试了各种不同的修复方法,但我可能不得不完全重命名这个类的CommentsController(希望这很有效)。 最好的方法是什么? 我是Rails的新手,所以我需要一些帮助才能正确地改变它们。

以下是CommentsController看起来像FYI的内容:

class CommentsController < ApplicationController def new @post = Post.new(params[:post]) end def show @comment = Comment.find(params[:id]) respond_to do |format| format.js end end def create @post = Post.find(params[:post_id]) @comment = Comment.new(params[:comment]) @comment.micropost = @post @comment.user = current_user if @comment.save redirect_to(:back) else render partial: 'shared/_comment_form', locals: { post: @post } end end end 

评论与每个post相关联(用户可以对post发表评论)。 如果需要,我也会发布其他代码。

这是heroku日志的错误

 2013-04-09T05:55:19.454545+00:00 app[web.2]: /app/app/controllers/comments_contr oller.rb:1:in `': superclass mismatch for class CommentsControll er (TypeError) 

Routes.db

 SampleApp::Application.routes.draw do resources :posts, :path => "posts" resources :users do resources :messages do collection do post :delete_selected end end end ActiveAdmin.routes(self) devise_for :admin_users, ActiveAdmin::Devise.config resources :users do member do get :following, :followers end end resources :sessions, only: [:new, :create, :destroy] resources :posts, only: [:create, :destroy] resources :relationships, only: [:create, :destroy] resources :posts do resources :comments end root to: 'static_pages#home' match '/signup', to: 'users#new' match '/signin', to: 'sessions#new' match '/signout', to: 'sessions#destroy', via: :delete match '/post', to: 'static_pages#post' match '/post1', to: 'static_pages#post1' match '/faq', to: 'static_pages#faq' match '/review', to: 'users#review' match "/posts/:id/review" => "posts#review" end 

当我在rails app文件夹中运行高级索引搜索时,会出现相关文件

 - comments_controller.rb - comments_helper.rb - comments_helper_spec.rb - comments_controller_spec.rb - 3 migration files - routes.rb (posted above) - schema.rb (table called "active_admin_comments" and table called "comments') - post.rb model (has_many :comments) - user.rb model (has_many :comments) - comment.rb model - active_admin.rb in config/initializer (any instance where I find "comments" has been #'ed out") 

我有几乎相同的问题(服务器启动正确,但rspec失败,同样的错误)。 在我的情况下,问题出在ActiveAdmin(0.6.0)中。 不知道到底是什么,也许是命名空间中的东西。

只需降级到0.5.0在该版本上,CommentsController没有问题。

我与admin命名空间有类似的冲突,因为我在我的应用程序中定义了Admin::CommentsController

尝试将ActiveAdmin的默认命名空间更改为“admin”以外的其他命名空间

配置/初始化/ active_admin.rb

 config.default_namespace = :activeadmin # Default :admin 

我假设ActiveAdmin有自己的CommentsController来自另一个基类。 它只影响运行测试,所以我只是将路由更改为:

 unless Rails.env.test? devise_for :admin_users, ActiveAdmin::Devise.config ActiveAdmin.routes(self) end 

除非您想要针对ActiveAdmin内的路由进行测试,否则此解决方案非常有效。

从Active Admin 0.6.1开始,您可以重命名Active Admin包含的评论模块,以便它与您自己的评论模块不冲突。 这些是选项:

 # == Admin Comments # # This allows your users to comment on any resource registered with Active Admin. # # You can completely disable comments: # config.allow_comments = false # # You can disable the menu item for the comments index page: # config.show_comments_in_menu = false # # You can change the name under which comments are registered: # config.comments_registration_name = 'AdminComment'