Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

superclass mismatch for class CommentsController (TypeError), best way to rename?

I ran into some problem tonight while deploying and I'm trying to get this fixed asap

I have no idea why this is happening. Everything works fine locally but not on heroku. I tried all sorts of different fixes after researching but I may have to resort to renaming this class CommentsController completely (hopefully that works). What is the best way to go about that? I'm pretty new to Rails so I need some help on making these changing correctly.

Here's what the CommentsController looks like 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

Comments are associated to each post (users are able to comment on posts). I will post other codes up as well if needed.

Here's the error from heroku logs

2013-04-09T05:55:19.454545+00:00 app[web.2]: /app/app/controllers/comments_contr
oller.rb:1:in `<top (required)>': 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

When I ran advanced indexed search inside the rails app folder, here were the relevant files that came up

- 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")
like image 911
syk Avatar asked Apr 09 '13 06:04

syk


3 Answers

I had almost the same issue (server starts correctly, but RSpec fails with the same error). In my case, the problem was in ActiveAdmin (0.6.0). Don't know what exactly, maybe something related to namespacing.

Just downgraded to 0.5.0 On that version, I didn't have any problems with CommentsController.

like image 123
Dmitry Avatar answered Nov 05 '22 21:11

Dmitry


I'm assuming ActiveAdmin has its own CommentsController that comes from another base class. It only affects running tests, so I just changed my routes to:

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

This solution works perfectly well unless you want to test against the routes inside ActiveAdmin..

like image 31
Michael Baldry Avatar answered Nov 05 '22 21:11

Michael Baldry


I had a similar conflict with the admin namespace, as I had a Admin::CommentsController defined within my app.

Try changing the default namespace of ActiveAdmin to something other than 'admin'

config/initializers/active_admin.rb

config.default_namespace = :activeadmin # Default :admin
like image 3
Cam Avatar answered Nov 05 '22 21:11

Cam