21

I'm applying enum on the following attribute: transparency

The same attribute (with enum) is used in two different models: Category and Post

Is it possible to share the enum values between models, to avoid code duplication:

enum transparency: %w(anonymous private public)
Promise Preston
  • 24,334
  • 12
  • 145
  • 143
Fellow Stranger
  • 32,129
  • 35
  • 168
  • 232

2 Answers2

32

You can use a concern.

module HasTransparency
  extend ActiveSupport::Concern
  included do
    enum transparency: %w(anonymous private public)
  end
end

Then include it in your models:

class Category < ActiveRecord::Base
  include HasTransparency

  ....
end
lunr
  • 5,159
  • 4
  • 31
  • 47
14

An alternative to "the right way" of using a concern or module, you can just make reference to another class enum. It worked perfectly for me:

enum same_values_than_other: SomeOtherClass.my_awesome_enum
MegaTux
  • 1,591
  • 21
  • 26