Skip to content

Instantly share code, notes, and snippets.

@iiwo
Last active June 16, 2022 12:28
Show Gist options
  • Save iiwo/44feae3850d0d9f9e2c9d1ab97255dd2 to your computer and use it in GitHub Desktop.
Save iiwo/44feae3850d0d9f9e2c9d1ab97255dd2 to your computer and use it in GitHub Desktop.
enums_in_rails.md
db/model string/no enum integer/array enum integer/hash enum string/hash enum pg enum/hash enum
migration(pg) add_column(:scraper_requests, :initiation_context, :string) add_column(:scraper_requests, :initiation_context, :integer) add_column(:scraper_requests, :initiation_context, :integer) add_column(:scraper_requests, :initiation_context, :string, default: 'regular') execute("CREATE TYPE initiation_contexts AS ENUM ('regular', 'onboarding');") add_column(:scraper_requests, :initiation_context, :initiation_contexts)
model validates(:initiation_context, inclusion: { in: %w[onboarding] } enum initiation_context: [:regular, :onboarding] enum initiation_context: { regular: 0, onboarding: 1 } enum initiation_context: { regular: 'regular', onboarding: 'onboarding' } enum initiation_context: { regular: 'regular', onboarding: 'onboarding' }
changes easy hard (order dependency) easy easy hard (requires db migration, value updates complicated)
readability good bad (integer values in the db) bad (integer values in the db) good good
helper methods no yes yes yes yes
validation (inclusion) no (explicitly added) yes yes yes yes
db constraint (data integrity assured) no no no no yes
comments best query performance and minimal size when using integer best query performance and minimal size when using integer not documented well (see rails/rails#43529)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment