2014-09-19 4 views
3

мне очень нравится Rails 4 новая функция Enum, но я хочу использовать EnumРубин на Rails Global ActiveRecord :: Enum

enum status: [:active, :inactive, :deleted]

в каждой модели. Я не могу найти способ, как объявить, например, в config/initializes/enums.rb и включаю в каждой модели

Я очень новый в Ruby on Rails и нужна ваша помощь, чтобы найти выход

ответ

17

Использование ActiveSupport::Concern эта функция создана для dry ИНГ образцовые коды:

#app/models/concerns/my_enums.rb 
module MyEnums 
    extend ActiveSupport::Concern 

    included do 
    enum status: [:active, :inactive, :deleted] 
    end 
end 

# app/models/my_model.rb 
class MyModel < ActiveRecord::Base 
    include MyEnums 
end 

# app/models/other_model.rb 
class OtherModel 
    include MyEnums 
end 

Read more

+0

Танки зеленый человек и спас мой день:) –

+0

@IrakliLekishvili мое удовольствие! –

+0

Отличный ответ. Я также нашел [этот вопрос и ответ] (http://stackoverflow.com/questions/14541823/how-to-use-concerns-in-rails-4) полезным. –

0

Я думаю, вы могли бы использовать модуль, содержащий это перечисление затем вы можете включать в каждом модуле вы хотите использовать:

# app/models/my_enums.rb 
Module MyEnums 
    enum status: [:active, :inactive, :deleted] 
end 

# app/models/my_model.rb 
class MyModel < ActiveRecord::Base 
    include MyEnums 
end 

# app/models/other_model.rb 
class OtherModel 
    include MyEnums 
end 
+1

Это не будет работать, потому что перечисление определено в ActiveRecord :: Enum. Поэтому я получаю эту ошибку: ' ': undefined method' enum' для MyEnums: Module (NoMethodError) –

+1

'enum' класс макроса доступен только в' ActiveRecord'. –