2014-09-18 20 views
12

Mam jeden problem i dwie klasy, które go obejmują. W trosce zdefiniowałem jedną zmienną. Oto obawy i dwa modele:Prawidłowe użycie stałych obawy

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 

Dostaję ostrzeżeń:

/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 

Chyba, że ​​po załadowaniu jednej klasy (jak Guardian), to również ładuje stałym poziomie, a ładowanie drugiej klasy próbuje ponownie załadować stałą, a następnie pojawi się ostrzeżenie. Jak mogę tego uniknąć bez konieczności umieszczania stałych w dwóch modelach? Dzięki

Odpowiedz

20

Po napotkaniu tego problemu natknąłem się na ten sam błąd.

Przewodnik, który podążałem, ale także Stała w dołączonym bloku i wydawało się, że nie ma błędu. Ale mój dziennik rzucił mi dokładnie taki sam błąd, jaki masz.

Po pewnym prób i błędów, po prostu usunięte Stała z bloku i umieścić go na zewnątrz, jak:

module UserInstance 
    extend ActiveSupport::Concern 

    included do 

    end 

    ACTIVE = 'active' 
end 

W ten sposób nadal może uzyskać dostępu do Constant, ale nie mieli już więcej błędów. Nie jestem w 100% pewien, czy to jest właściwa droga, ale zadziałało i nie mogłem znaleźć żadnych błędów, więc pójdę z tym.

Chciałbym teraz, jeśli to działa również dla Ciebie!

+0

Tak, nawet na Railsach 5 z obawami wydaje się, że jest to właściwy sposób – jpwynn

Powiązane problemy