2014-09-18 21 views
12

Ich habe eine Sorge und zwei Klassen, die es enthalten. Im Konzern habe ich eine Variable definiert. Hier ist die Sorge und die beiden Modelle:Korrekte Verwendung von const Konstanten

module UserInstance 
    extend ActiveSupport::Concern 

    included do 

    ACTIVE = 'active' 
    end 
end 

class Guardian < ActiveRecord::Base 

    include UserInstance 

end 

class Student < ActiveRecord::Base 

    include UserInstance 

end 

Ich bekomme diese Warnungen:

/app/app/models/concerns/user_instance.rb:12: warning: already initialized constant UserInstance::ACTIVE 
/app/app/models/concerns/user_instance.rb:12: warning: previous definition of ACTIVE was here 

Ich denke, dass, sobald es eine Klasse lädt (wie Guardian), ist es auch die konstante lädt, und Das Laden der anderen Klasse versucht, die Konstante erneut zu laden, und dann wird die Warnung ausgegeben. Wie kann ich das vermeiden, ohne die Konstanten in die beiden Modelle zu setzen? Danke

Antwort

20

Ich stieß gerade auf den gleichen Fehler, wenn ich versuchte, Bedenken zu implementieren.

Der Leitfaden folgte ich auch aber die Konstante in den enthaltenen Block und schien keinen Fehler zu haben. Aber mein Log hat mich genau den gleichen Fehler wie du hast.

Nach einiger Versuch und Irrtum, ich entfernt nur die Konstante aus dem Block und steckte es draußen, wie:

module UserInstance 
    extend ActiveSupport::Concern 

    included do 

    end 

    ACTIVE = 'active' 
end 

Auf diese Weise habe ich noch die Konstante zugreifen konnte, aber nicht bekommen mehr Fehler. Ich bin mir nicht 100% sicher, dass dies der richtige Weg ist, aber es hat funktioniert und ich konnte keine Fehler finden, also werde ich mitgehen.

Ich möchte jetzt, wenn das auch für Sie funktioniert!

+0

Ja, auch auf Rails 5 mit Bedenken scheint dies der richtige Weg zu sein – jpwynn

Verwandte Themen