Es relativamente común ver campos booleanos en una base de datos para representar algún estado y al mismo tiempo es igualmente común ver que por un descuido esta columna pueda y llegue a tener valores nulos.
Esto puede acarrear errores de semántica y de lógica. Para evitar este problema es una buena práctica definir los campos como null: false
y además siempre dar un valor por defecto, por ejemplo admin: false
.
create_table :users do |t|
t.boolean :admin, null: false, default: false
end
Si un campo es booleano, entonces su valor es true
o false
.
Pero, si tú, como yo en algún momento, pensaste en usar el valor null
como un tercer estado, quizás lo que busques es un campo enum
:
create_table :users do |t|
t.integer :role, null: false, default: 1
end
class User < ApplicationRecord
enum :role, [:user, :admin]
end
o incluso una lookup table
:
create_table :roles do |t|
t.string :role, null: false
end
create_table :users do |t|
t.references :role, null: false, foreign_key: true
end
La mejor opción dependerá del contexto de tu aplicación.
Un excelente post sobre el tema es Avoid the Three-state Boolean Problem