2014-09-18 3 views
12

У меня есть одна проблема и два класса, которые включают ее. В беспокойстве я определил одну переменную. Вот это забота и две модели:Правильное использование констант беспокойства

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 

Я получаю это предупреждение:

/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 

Я думаю, что когда-то он загружает один класс (как Guardian), он также загружает константу, и загрузка другого класса пытается снова загрузить константу, а затем выдается предупреждение. Как я могу избежать этого, не ставя константы в две модели? Спасибо

ответ

20

Я просто наткнулся на ту же ошибку, когда пытался реализовать проблемы.

В руководстве я также следовал, но Константа в включенном блоке и, казалось, не имела ошибки. Но мой журнал бросил на меня ту же ошибку, что и у вас.

После нескольких проб и ошибок, я только удалил Константы из блока и поставить его снаружи, как:

module UserInstance 
    extend ActiveSupport::Concern 

    included do 

    end 

    ACTIVE = 'active' 
end 

Таким образом, я все еще мог получить доступ к Константы, но не получил больше ошибок. Я не уверен на 100%, что это правильный путь, но он работал, и я не мог найти никаких ошибок, поэтому я поеду с ним.

Я бы хотел, если это сработает и для вас!

+0

Да, даже на Rails 5, используя проблемы, кажется, это правильный способ сделать это – jpwynn