2013-03-11 26 views
5

Giocare con Rails e ereditarietà del controller.Rails - mancata corrispondenza della superclasse

Ho creato un controller chiamato AdminController, con una classe figlia chiamato admin_user_controller posto in /app/controllers/admin/admin_user_controller.rb

Questo è il mio routes.rb

namespace :admin do 
    resources :admin_user # Have the admin manage them here. 
    end 

app/controllers/admin/admin_user_controller.rb

class AdminUserController < AdminController 
    def index 
    @users = User.all 
    end 
end 

app/controller/admin_controller.rb

class AdminController < ApplicationController 

end 

Ho un modello utente che desidero modificare con privilegi di amministratore.

Quando provo a connettersi a: http://localhost:3000/admin/admin_user/

ricevo questo errore:

superclass mismatch for class AdminUserController 

risposta

6

Per completare quello che @Intrepidd ha detto, si può avvolgere la classe all'interno di un modulo, in modo che la classe AdminUserController non eredita due volte da ApplicationController, quindi una soluzione semplice potrebbe essere:

module Admin 
    class AdminUserController < AdminController 
    def index 
     @users = User.all 
    end 
    end 
end 
8

Questo errore si presenta se si definisce due volte la stessa classe con diverse superclassi. Forse prova a usare lo class AdminUserController nel tuo codice in modo da essere sicuro di non definirlo due volte. È probabile che ci sia un conflitto con un file generato da Rails.

0

ho riparato creando un controller "Dashboard" e un "indice" def. Ho quindi modificato i miei routes.rb in tal modo:

Rails.application.routes.draw do 



namespace :admin do 
    get '', to: 'dashboard#index', as: '/' 

    resources :posts 
end 



end 
Problemi correlati