Почему бы не сделать просто поле status, куда записывать 0, 1, 2 и т.д. Да не так гибко, но база не будет нагружаться лишним запросом. Лично я всегда делаю так:
# Enumerable status
STATUS = {
0 => :waiting,
1 => :finished,
2 => :expired,
3 => :removed
}
STATUS.each do |key, status|
define_method "#{status}!" do
self.status = key
self.save
end
define_method "#{status}?" do
self.status == key
end
end
def status?
STATUS[self.status]
end
После этого можно использовать данные методы:
object.finished! # status = 1
object.waiting? # false
object.waiting! # status = 0
object.waiting? # true
object.status? # waiting