I have a field type in a model called user which is an int in the db. The value of the int speficies the type of store it is. Example:
You should avoid using "type" as a model's column name unless you use Single Table Inheritance.
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#class-ActiveRecord::Base-label-Single+table+inheritance
One way you be to write an file in initializers folder or lib folder
say app_contants.rb and in this file you can write
MOM=1
DAD=2
user.type == mom
2.If you create an lib file make it a module
module app_constants
mom = 1
dad = 2
end
and simply include this module wherever you need
Something like:
class User < ActiveRecord::Base
TYPES = %w{ mom dad grandmother grandfather son }
TYPES.each_with_index do |meth, index|
define_method("#{meth}?") { type == index }
end
end
u = User.new
u.type = 4
u.mom? # => false
u.son? # => true
Since Rails 4.1, there is support for ActiveRecord::Enum.
There's a useful tutorial here, but in short:
# models/user.rb
class User < ActiveRecord::Base
enum family_role: [ :mum, :dad, :grandmother]
end
# logic elsewhere
u = User.first
u.family_role = 'mum'
u.mum? # => true
u.family_role # => 'mum'
Note: To convert from your current scheme (where your database already stores numbers corresponding to values), you should use the hash syntax:
enum family_role: { mum: 0, dad: 1, grandmother: 2 }
I would additionally propose that you reserve 0
for the default state, but that's just one convention and not critical.