跨模型共享ActiveRecord :: Base枚举

时间:2015-07-18 09:00:48

标签: ruby-on-rails ruby activerecord enums

我有2个模特

class Author < ActiveRecord::Base
  enum state: [:draft, :ready]
end

class Creation < ActiveRecord::Base
  enum state: [:draft, :ready]
end

正如您所看到的,两个模型都定义了状态枚举。我想摆脱这种重复,并在其他地方移动状态

我该如何做到这一点,同时保留所有有用的东西,如Author.ready,并在数据库中的整数和代码中的字符串之间自动转换。

1 个答案:

答案 0 :(得分:1)

您可以使用下面的concerns

module SimpleState
  extend ActiveSupport::Concern
  included do
    enum state: [:draft, :ready]
  end
end

然后将其包含在您的模型中,如下所示

#author.rb
class Author < ActiveRecord::Base
  include SimpleState
end

#creation.rb
class Creation < ActiveRecord::Base
  include SimpleState
end