2017-10-04 13 views
0

L'utilisation d'un contrôleur avec espace de noms et de la mise en page de l'application n'est pas en cours de chargement.Rails Controller Namespace Inheritance Missing Layout

# controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
end 

# controllers/servers/base_controller.rb 
module Servers 
    class BaseController < ApplicationController 

    def initialize 
    # I noticed params are not accessible here either... 
    # Only in the child controller. 
    end 

    end 
end 

# controllers/servers/test_controller.rb 
module Servers 
    class TestController < BaseController 

    def index 
    end 

    end 
end 

Une configuration assez basique ici. Chaque fois que je route vers /servers/:id, il charge la page avec le paramètre, mais la disposition de l'application ne se charge pas. J'ai une série de deux contrôleurs que je voudrais hériter de ce BaseController pour initialiser quelques choses. J'ai également remarqué que, en plus du problème de mise en page, le BaseController n'a pas accès aux paramètres url. Le TestController le fait ... Quelqu'un peut-il expliquer ces deux problèmes que je vois?

Rails 5.1.4

rubis 2.4.1p111

Répondre

0

cernées mon problème. N'utilisez pas une méthode initialize dans votre classe. Rails n'aime pas ça. Utilisez before_action à la place.

+0

Juste un pressentiment mais ça pourrait être bien si vous appelez 'super' dedans. – ulferts

+0

Merci @ulferts. C'est la première chose que j'ai essayé. Si je me souviens bien, cela a fonctionné pour la mise en page, mais les variables d'instance ne se propageaient pas aux autres contrôleurs. Mais l'utilisation de 'before_action' a corrigé les deux problèmes que j'avais. – Chris