2016-07-02 13 views
0

Betrachten ich in /lib/foo/bar/baz.rb befindet sich eine Klasse nicht funktioniert, wie folgt definiert:Fügen Sie nicht in Rails-Controller

module Foo 
    module Bar 
    class Baz 
     def initialize 
     self.name = 'Baz' 
     end 
    end 
    end 
end 

Ich habe auch die folgenden Controller /controllers/my_controller.rb, wie folgt definiert:

class MyController < ApplicationController 
    def index 
    render json: ::Foo::Bar::Baz.new 
    end 
end 

was gibt JSON {name: "Baz"} wie man erwarten würde.

Das Problem ist, wenn ich versuche, das Foo::Bar Modul enthält, so habe ich es nicht auf den Namen Baz Klasse jedes Mal, wenn ich es will prepend verwenden:

class MyController < ApplicationController 
    include ::Foo::Bar 

    def index 
    render json: ::Baz.new 
    end 
end 

Gibt mir die folgenden Fehler Nachricht: uninitialized constant Baz.

Warum ???

+0

Entfernen Sie das '::' in 'render json: :: Baz'. – Aetherus

Antwort

0

ich glaube, Sie

include ::Foo::Bar 
... 
render json: Baz.new 
+0

Klassen können nicht eingeschlossen werden. – Aetherus

+0

Ja, ich habe mich geirrt. Es war 3 Uhr morgens als ich antwortete. – Aleksey

0

::Baz gewährleistet das Modul zu finden Baz in der Top-Level-Namespace versuchen sollte, so sollten Sie nicht diese Syntax verwenden. render json: Baz.new sollte funktionieren.