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")
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.
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..
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With