A Simple Guide to Enum’s with Rails

black and white dappled light on leaves

What

Why

When

  • Status enum (not started: 0, in progress: 1, complete: 2)
  • Direction enum (north: 0, south: 1, east: 2, west: 3)
  • Suit enum (hearts: 0, spades: 1, diamonds: 2, clubs: 3)

How

Setting up an enum

  1. Set up your model with the enum attribute set to an integer
rails g model Task description:string status:integer

2. In the model file, list the characteristics of the attribute. Note that you can let Rails set default values but can declare the values as well.

class Task < ActiveRecord::Base
enum status: [ :not_started, :in_progress, :complete ]
end
class Task < ActiveRecord::Base
enum status: {in_progress: 1 , complete: 2, not_started: 0 }
end
// both ways set "not_started" = 0, "in_progress" = 1, "complete" = // 2

That’s it! Rails makes it super easy to set up an enum.

Working with an enum

  • Declare or change attributes using the string, the int, even a bang
> task.status = 1; task.status
=> "in_progress"
> task.status = "in_progress"; task.status
=> "in_progress"
> task.in_progress!
=> true
> task.status
=> "in_progress"
  • Get the value or get whether the instance is a specific status
> task.status
=> "in_progress"
> task.first.in_progress?
=> true
  • Find all objects with a specific value
> Task.in_progress
TaskLoad (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "taskes"."status" = ? [["status", 1]]
  • Enums can make writing forms a breeze
// ../form.html.erb<div class="field">
<%= f.label :status %><br>
<%= f.select :status, Phone.status.keys %>
</div>

As always, thanks for reading!! For more on Enums check out some of the resources below 📚

--

--

Full-Stack Software Engineer, Designer, and salsa dancer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store