appraisal-rb Logo by Aboling0, CC BY-SA 4.0 kettle-rb Logo by Aboling0, CC BY-SA 4.0 floss-funding Logo by Aboling0, CC BY-SA 4.0 galtzo-floss Logo by Aboling0, CC BY-SA 4.0 omniauth Logo by (presumed) tomeara, (presumed) MIT resque Logo by Resque development team, MIT rubocop-lts Logo by Aboling0, CC BY-SA 4.0 oauth Logo by Chris Messina, CC BY-SA 3.0 ruby-openid Logo by Aboling0, CC BY-SA 4.0

Efficient Boolean Flags with flag_shih_tzu

Store multiple boolean flags efficiently in a single integer column with flag_shih_tzu.

Why Use Bit Flags?

Instead of creating multiple boolean columns, store all flags in one integer:

Setup

Add to your Gemfile:

gem 'flag_shih_tzu'

Define Flags

class User < ActiveRecord::Base
  include FlagShihTzu
  
  has_flags 1 => :active,
            2 => :admin,
            3 => :verified,
            4 => :premium,
            column: 'flags'
end

Usage

user = User.new
user.active = true
user.admin = true
user.save

# Query users
User.active
User.admin
User.not_verified

# Check flags
user.active?      # => true
user.verified?    # => false

# Set multiple flags
user.flags = [:active, :verified, :premium]

Database Migration

class AddFlagsToUsers < ActiveRecord::Migration[7.0]
  def change
    add_column :users, :flags, :integer, default: 0, null: false
  end
end

Advanced Features

Perfect for managing user permissions and settings!