module ActsAsEnum

EnumAttr# == Example

acts_as_enum(attr, options)
attr is model attribute
options incldue :in, :prefix
:in value as Array [ [value, label], ... ] or [ [special_method_name, value, label], ... ]
:prefix value as true or false

class User < ActiveRecord::Base
  acts_as_enum :status, :in => %w(disable, enable)
end

table column status type is Varchar or Varchar2
class User < ActiveRecord::Base
  acts_as_enum :status, :in => [ ['disable', '冻结'], ['enable', '激活'] ]
end
class User < ActiveRecord::Base
  acts_as_enum :status, :in => { 'disable' => '冻结', 'enable' => '激活' }
end

and type is Integer or number of string
NOTE: table column value must be match type, i.e. varchar: '1'; integer: 1
class User < ActiveRecord::Base
  acts_as_enum :status, :in => [ ['disable', 0, '冻结'], ['enable', 1, '激活'] ]
end
class User < ActiveRecord::Base
  acts_as_enum :status, :in => [ ['disable', '0', '冻结'], ['enable', '1', '激活'] ]
end

Also can usage alias enum_attr
enum_attr :status, :in => [ ['disable', 0, '冻结'], ['enable', 1, '激活'] ]

Will generate bellow:

  Constants: User::STATUSES(return hash { 0 => "冻结", 1 => "激活" }), User::DISABLE, User::ENABLE

  Named scopes: User.enable, User.disable

  Class methods: User.status_options => [["冻结", 0], ["激活", 1]]

  Instance methods: user.status_name, user.enable?, user.disable?, user.enable!(update user.status to 1) and user.disable!(update user.status to 1)

If with option prefix is true:
  acts_as_enum :status, :in => [ ['disable', 0, '冻结'], ['enable', 1, '激活'] ], :prefix => true

Will generate bellow:
  User::STATUS_DISABLE, User::STATUS_ENABLE, User.status_enable, User.status_disable, user.status_enable?, user.status_disable?

Public Class Methods

included(base) click to toggle source
# File lib/acts_as_enum.rb, line 51
def self.included(base)
  base.extend ClassMethods
end