8

Mi sono imbattuto in qualche problema stasera durante la distribuzione e sto cercando di ottenere questo corretto al più prestomancata corrispondenza della superclasse per la classe CommentsController (TypeError), miglior modo per rinominare?

Non ho idea del motivo per cui questo sta accadendo. Tutto funziona bene localmente ma non su heroku. Ho provato tutti i tipi di correzioni diverse dopo la ricerca, ma potrei dover ricorrere a rinominare completamente questo CommentController di classe (spero che funzioni). Qual è il modo migliore per farlo? Sono abbastanza nuovo di Rails quindi ho bisogno di aiuto per fare in modo che questi cambiamenti siano corretti.

Ecco ciò che il CommentsController appare come 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 

commenti sono associati a ciascun posto (gli utenti sono in grado di commentare i post). Pubblicherò anche altri codici se necessario.

Ecco l'errore da tronchi Heroku

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 

quando mi sono imbattuto ricerca avanzata indicizzata all'interno delle rotaie cartella app, qui sono stati i file rilevanti che si avvicinò

- 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

Avete 'CommentsController' dichiarato in altri file nella vostra app? –

+0

Puoi aggiornare la domanda con Routes. –

+0

l'unica cosa che ho modificato nelle rotte dall'ultima implementazione (funzionante) è l'aggiunta di questa corrispondenza di riga '"/posts /: id/review "=>" post # review "' – syk

risposta

8

Ho quasi lo stesso problema (l'avvio del server è corretto, ma rspec non riesce con lo stesso errore) . Nel mio caso il problema era in ActiveAdmin (0.6.0). Non so cosa esattamente, forse qualcosa nel namespace.

Basta effettuare il downgrade a 0.5.0 Su quella versione non ci sono problemi con CommentsController.

+3

Perché non avevo bisogno della funzione commenti su admin attivo, ho aggiunto: "config.allow_comments = false" in config/initializers/devise.rb e sono stato in grado di continuare ad usare ActiveAdmin 0.6.0 con il mio CommentsController – guilleva

+1

Penso che volevi dire config/initializers/active_admin.rb piuttosto che config/initializers/devise.rb – Rtype

+0

Ho ancora questo problema in 0.6.0 con "config.allow_comments = false" che esegue i test di rspec, anche se sembra lavorare tramite il browser. Il downgrade a 0.5.1 risolve questo problema. – recurser

2

Suppongo che ActiveAdmin abbia il proprio CommentController che proviene da un'altra classe base. Esso riguarda solo l'esecuzione di test, quindi ho solo cambiato i miei percorsi a:

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

Questa soluzione funziona perfettamente bene a meno che non si desidera testare contro i percorsi all'interno ActiveAdmin ..

3

ho avuto un conflitto simile con l'amministratore spazio dei nomi, dato che avevo un Admin::CommentsController definito all'interno della mia app.

Provare a cambiare lo spazio dei nomi di default di ActiveAdmin a qualcosa di diverso 'admin'

config/inizializzatori/active_admin.rb

config.default_namespace = :activeadmin # Default :admin 
1

Come di Admin attivo 0.6.1, è possibile rinominare il modulo commenti che Active Admin include in modo che non sia in conflitto con il tuo. Queste sono le opzioni:

# == 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

Ho aggiunto "0.6.1" al mio Gemfile ma mi richiede di ripristinare jquery-rails su una versione precedente alla 3.0 – sixty4bit

Problemi correlati