很多時候,會在資料庫存入魔法數字0、1、2、⋯⋯來代表某種狀態或事物
例如開了一個 gender 的欄位,資料類型是 string,分別存 female 跟 male 兩種字串
但也可以資料類型是 integer,存 0 與 1 兩種數字
如果捉出數字是 0,就代表是 male ,如果數字是 1,就代表是 female
不過寫到最後,常常到最後會不了解 0 與 1 代表什麼意義
這裡來介紹這樣一個 gem
網址如下
https://github.com/lwe/simple_enum
首先
Gemfile
source 'https://rubygems.org'
gem 'faker'
gem 'font-awesome-sass', '~> 4.2.0'
gem 'bootstrap-sass'
gem 'annotate'
gem 'simple_enum', '~> 2.0.0' , require: 'simple_enum/mongoid'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
bundle
rails s
去 girb 開一個欄位 level 來
rails g migration add_level_cd_to_girb
db/migrate/xxxxxxxxxxxxxx_add_level_to_girb.rb
class AddLevelCdToGirb < ActiveRecord::Migration
def change
add_column :girbs, :level_cd, :integer
end
end
rake db:migrate
app/models/girb.rb
# == Schema Information
#
# Table name: girbs
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
# like :integer default(0)
# email :string(255)
#
class Girb < ActiveRecord::Base
has_many :bangs, dependent: :destroy
has_many :comments, dependent: :destroy
as_enum :level, dead: 0, successful: 1, famous: 2, working: 3, average: 4, amateur: 5, unknown: 6, bad: 7
def self.search(query)
where("name like ?", "%#{query}%")
end
end
利用種子快速生成資料
db/seeds.rb
Girb.delete_all
168.times do
Girb.create(
name: Faker::Name.name,
email: Faker::Internet.email,
like: rand(0..1000),
level_cd: rand(0..7)
)
end
rake db:seed
使用 Rails console 來實際操作一下吧