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