8

Ich lief heute Abend bei der Bereitstellung in ein Problem, und ich versuche, so schnell wie möglich zu behebenOberklasse Mismatch für Klasse CommentsController (TypeError), beste Möglichkeit zum Umbenennen?

Ich habe keine Ahnung, warum das passiert. Alles funktioniert gut lokal, aber nicht auf Heroku. Ich habe versucht, verschiedene Arten von Korrekturen nach der Recherche, aber ich muss möglicherweise auf diese Klasse CommentsController vollständig umbenennen (hoffentlich das funktioniert). Was ist der beste Weg, um das zu tun? Ich bin ziemlich neu in Rails, also brauche ich etwas Hilfe, um diese Änderungen richtig zu machen.

Hier ist, was die CommentsController sieht aus wie 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 

Kommentare zu jedem Beitrag zugeordnet sind (Benutzer können auf Beiträge kommentieren). Ich werde bei Bedarf auch andere Codes hochladen.

Hier ist der Fehler von 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 

Wenn ich in den Schienen app Ordner indizierte Suche fortgeschrittene lief, waren hier die entsprechenden Dateien, die

up kam
- 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") 
+2

Haben Sie 'CommentsController' in anderen Dateien in Ihrer App deklariert? –

+0

Können Sie die Frage mit Routen aktualisieren. –

+0

das einzige, was ich seit der letzten (funktionierenden) Bereitstellung in Routen geändert habe, ist das Hinzufügen dieser Zeile. '/ Posts /: id/review" => "posts # review" ' – syk

Antwort

8

Ich habe fast das gleiche Problem (Serverstart korrekt, aber RSPEC schlägt mit demselben Fehler fehl) . In meinem Fall war das Problem in ActiveAdmin (0.6.0). Weiß nicht was genau, vielleicht etwas im Namensraum.

Downgrade auf 0.5.0 Bei dieser Version gibt es keine Probleme mit CommentsController.

+3

Da ich nicht die Kommentarfunktion auf Active-Admin benötigt habe, fügte ich hinzu: "config.allow_comments = false" in config/initializers/devise.rb und ich konnte weiterhin ActiveAdmin 0.6.0 verwenden mit meinem eigenen CommentsController – guilleva

+1

Ich denke, Sie meinten config/initializers/active_admin.rb anstatt config/initializers/devise.rb – Rtype

+0

Ich bekomme dieses Problem immer noch in 0.6.0 mit "config.allow_comments = false" läuft rspec Tests, obwohl es scheint über den Browser zu arbeiten. Downgrade auf 0.5.1 behebt dies. – recurser

2

Ich nehme an, dass ActiveAdmin seinen eigenen CommentsController hat, der von einer anderen Basisklasse kommt. Es wirkt sich nur auf Tests laufen, so dass ich meine Routen geändert nur:

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

Diese Lösung funktioniert sehr gut, wenn man gegen die Routen innerhalb ActiveAdmin testen wollen ..

3

Ich hatte einen ähnlichen Konflikt mit dem Admin Namensraum, wie ich eine Admin::CommentsController in meiner App definiert hatte.

Versuchen Sie, die Standard-Namespace von ActiveAdmin auf etwas anderes als 'admin' Wechsel

config/initializers/active_admin.rb

config.default_namespace = :activeadmin # Default :admin 
1

Als aktiver Admin 0.6.1, können Sie das Kommentarmodul umbenennen das Active Admin enthält, damit es nicht mit Ihrem eigenen Konflikt steht. Dies sind die Optionen:

# == 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' 
+0

Ich habe '0.6.1' zu meiner Gemfile hinzugefügt, aber es erfordert, dass ich jquery-rails auf eine Version vor 3.0 zurückstelle – sixty4bit

Verwandte Themen